vue-resource

Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery。vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。另外,vue-resource还提供了非常有用的inteceptor功能,使用inteceptor可以在请求前和请求后附加一些行为,比如使用inteceptor在ajax请求时显示loading界面。

vue-resource特点

vue-resource插件具有以下特点:

  1. 体积小
    vue-resource非常小巧,在压缩以后只有大约12KB,服务端启用gzip压缩后只有4.5KB大小,这远比jQuery的体积要小得多。
  2. 支持主流的浏览器
    和Vue.js一样,vue-resource除了不支持IE 9以下的浏览器,其他主流的浏览器都支持。
  3. 支持Promise API和URI Templates
    Promise是ES6的特性,Promise的中文含义为“先知”,Promise对象用于异步计算。
    URI Templates表示URI模板,有些类似于ASP.NET MVC的路由模板。
  4. 支持拦截器
    拦截器是全局的,拦截器可以在请求发送前和发送请求后做一些处理。
    拦截器在一些场景下会非常有用,比如请求发送前在headers中设置access_token,或者在请求失败时,提供共通的处理方式。

vue-resource使用

1、引入vue-resource

  1.  
    <script src="js/vue.js"></script>
  2.  
    <script src="js/vue-resource.js"></script>

2、引入vue-resource后,可以基于全局的Vue对象使用http,也可以基于某个Vue实例使用http。

  1.  
    // 基于全局Vue对象使用http
  2.  
    Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
  3.  
    Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
  4.  
     
  5.  
    // 在一个Vue实例内使用$http
  6.  
    this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);
  7.  
    this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

在发送请求后,使用then方法来处理响应结果,then方法有两个参数,第一个参数是响应成功时的回调函数,第二个参数是响应失败时的回调函数。
then方法的回调函数也有两种写法,第一种是传统的函数写法,第二种是更为简洁的ES 6的Lambda写法:

  1.  
    // 传统写法
  2.  
    this.$http.get('/someUrl', [options]).then(function(response){
  3.  
    // 响应成功回调
  4.  
    }, function(response){
  5.  
    // 响应错误回调
  6.  
    });
  7.  
    // Lambda写法
  8.  
    this.$http.get('/someUrl', [options]).then((response) => {
  9.  
    // 响应成功回调
  10.  
    }, (response) => {
  11.  
    // 响应错误回调
  12.  
    });

支持的HTTP方法

vue-resource的请求API是按照REST风格设计的,它提供了7种请求API:

  1.  
    get(url, [options])
  2.  
    head(url, [options])
  3.  
    delete(url, [options])
  4.  
    jsonp(url, [options])
  5.  
    post(url, [body], [options])
  6.  
    put(url, [body], [options])
  7.  
    patch(url, [body], [options])

除了jsonp以外,另外6种的API名称是标准的HTTP方法。当服务端使用REST API时,客户端的编码风格和服务端的编码风格近乎一致,这可以减少前端和后端开发人员的沟通成本。

客户端请求方法 服务端处理方法
this.$http.get(...) Getxxx
this.$http.post(...) Postxxx
this.$http.put(...) Putxxx
this.$http.delete(...) Deletexxx

options对象

参数 类型 描述
url string 请求的URL
method string 请求的HTTP方法,例如:'GET', 'POST'或其他HTTP方法
body Object, FormData string request body
params Object 请求的URL参数对象
headers Object request header
timeout number 单位为毫秒的请求超时时间 (0 表示无超时时间)
before function(request) 请求发送前的处理函数,类似于jQuery的beforeSend函数
progress function(event) ProgressEvent回调处理函数
credentials boolean 表示跨域请求时是否需要使用凭证
emulateHTTP boolean 发送PUT, PATCH, DELETE请求时以HTTP POST的方式发送,并设置请求头的X-HTTP-Method-Override
emulateJSON boolean 将request body以application/x-www-form-urlencoded content type发送

emulateHTTP的作用

  1.  
    如果Web服务器无法处理PUT, PATCH和DELETE这种REST风格的请求,你可以启用enulateHTTP现象。启用该选项后,请求会以普通的POST方法发出,并且HTTP头信息的X-HTTP-Method-Override属性会设置为实际的HTTP方法。
  2.  
    Vue.http.options.emulateHTTP = true;

emulateJSON的作用

  1.  
    如果Web服务器无法处理编码为application/json的请求,你可以启用emulateJSON选项。启用该选项后,请求会以application/x-www-form-urlencoded作为MIME type,就像普通的HTML表单一样。
  2.  
    Vue.http.options.emulateJSON = true;

response对象

response对象包含以下属性:

方法 类型 描述
text() string 以string形式返回response body
json() Object 以JSON对象形式返回response body
blob() Blob 以二进制形式返回response body
属性 类型 描述
ok boolean 响应的HTTP状态码在200~299之间时,该属性为true
status number 响应的HTTP状态码
statusText string 响应的状态文本
headers Object 响应头

CURD实例

1、GET请求

  1.  
    var demo = new Vue({
  2.  
    el: '#app',
  3.  
    data: {
  4.  
    gridColumns: ['customerId', 'companyName', 'contactName', 'phone'],
  5.  
    gridData: [],
  6.  
    apiUrl: 'http://211.149.193.19:8080/api/customers'
  7.  
    },
  8.  
    ready: function() {
  9.  
    this.getCustomers()
  10.  
    },
  11.  
    methods: {
  12.  
    getCustomers: function() {
  13.  
    this.$http.get(this.apiUrl)
  14.  
    .then((response) => {
  15.  
    this.$set('gridData', response.data)
  16.  
    })
  17.  
    .catch(function(response) {
  18.  
    console.log(response)
  19.  
    })
  20.  
    }
  21.  
    }
  22.  
    })

这段程序的then方法只提供了successCallback,而省略了errorCallback。
catch方法用于捕捉程序的异常,catch方法和errorCallback是不同的,errorCallback只在响应失败时调用,而catch则是在整个请求到响应过程中,只要程序出错了就会被调用。
在then方法的回调函数内,你也可以直接使用this,this仍然是指向Vue实例的:

  1.  
    getCustomers: function() {
  2.  
    this.$http.get(this.apiUrl)
  3.  
    .then((response) => {
  4.  
    this.$set('gridData', response.data)
  5.  
    })
  6.  
    .catch(function(response) {
  7.  
    console.log(response)
  8.  
    })
  9.  
    }

2、JSONP请求

  1.  
    getCustomers: function() {
  2.  
    this.$http.jsonp(this.apiUrl).then(function(response){
  3.  
    this.$set('gridData', response.data)
  4.  
    })
  5.  
    }

3、POST请求

  1.  
    var demo = new Vue({
  2.  
    el: '#app',
  3.  
    data: {
  4.  
    show: false,
  5.  
    gridColumns: [{
  6.  
    name: 'customerId',
  7.  
    isKey: true
  8.  
    }, {
  9.  
    name: 'companyName'
  10.  
    }, {
  11.  
    name: 'contactName'
  12.  
    }, {
  13.  
    name: 'phone'
  14.  
    }],
  15.  
    gridData: [],
  16.  
    apiUrl: 'http://211.149.193.19:8080/api/customers',
  17.  
    item: {}
  18.  
    },
  19.  
    ready: function() {
  20.  
    this.getCustomers()
  21.  
    },
  22.  
    methods: {
  23.  
    closeDialog: function() {
  24.  
    this.show = false
  25.  
    },
  26.  
    getCustomers: function() {
  27.  
    var vm = this
  28.  
    vm.$http.get(vm.apiUrl)
  29.  
    .then((response) => {
  30.  
    vm.$set('gridData', response.data)
  31.  
    })
  32.  
    },
  33.  
    createCustomer: function() {
  34.  
    var vm = this
  35.  
    vm.$http.post(vm.apiUrl, vm.item)
  36.  
    .then((response) => {
  37.  
    vm.$set('item', {})
  38.  
    vm.getCustomers()
  39.  
    })
  40.  
    this.show = false
  41.  
    }
  42.  
    }
  43.  
    })

4、PUT请求

  1.  
    updateCustomer: function() {
  2.  
    var vm = this
  3.  
    vm.$http.put(this.apiUrl + '/' + vm.item.customerId, vm.item)
  4.  
    .then((response) => {
  5.  
    vm.getCustomers()
  6.  
    })
  7.  
    }

5、Delete请求

  1.  
    deleteCustomer: function(customer){
  2.  
    var vm = this
  3.  
    vm.$http.delete(this.apiUrl + '/' + customer.customerId)
  4.  
    .then((response) => {
  5.  
    vm.getCustomers()
  6.  
    })
  7.  
    }

vue-resource是一个非常轻量的用于处理HTTP请求的插件,它提供了两种方式来处理HTTP请求:
1、使用Vue.http或this.$http
2、使用Vue.resource或this.$resource

  1.  
    data(){
  2.  
    return{
  3.  
    toplist:[],
  4.  
    alllist:[]
  5.  
    }
  6.  
    },
  7.  
    //vue-router
  8.  
    route:{
  9.  
    data({to}){
  10.  
    //并发请求,利用 Promise
  11.  
    return Promise.all([
  12.  
    //简写
  13.  
    this.$http.get('http://192.168.30.235:9999/rest/knowledge/list',{'websiteId':2,'pageSize':5,'pageNo':1,'isTop':1}),
  14.  
    //this.$http.get('http://192.168.30.235:9999/rest/knowledge/list',{'websiteId':2,'pageSize':20,'pageNo':1,'isTop':0})
  15.  
    //不简写
  16.  
    this.$http({
  17.  
    method:'GET',
  18.  
    url:'http://192.168.30.235:9999/rest/knowledge/list',
  19.  
    data:{'websiteId':2,'pageSize':20,'pageNo':1,'isTop':0},
  20.  
    headers: {"X-Requested-With": "XMLHttpRequest"},
  21.  
    emulateJSON: true
  22.  
    })
  23.  
    ]).then(function(data){//es5写法
  24.  
    return{
  25.  
    toplist:data[0].data.knowledgeList,
  26.  
    alllist:data[1].data.knowledgeList
  27.  
    }
  28.  
    //es6写法 .then()部分
  29.  
    //.then(([toplist,alllist])=>({toplist,alllist}))
  30.  
    },function(error){
  31.  
    //error
  32.  
    })
  33.  
    }
  34.  
    }

vue axios

vue2.0之后,就不再对vue-resource更新,而是推荐使用axios。基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用。

  • 功能特性
    1、在浏览器中发送 XMLHttpRequests 请求
    2、在 node.js 中发送 http请求
    3、支持 Promise API
    4、拦截请求和响应
    5、转换请求和响应数据
    6、取消请求
    7、自动转换 JSON 数据
    8、客户端支持保护安全免受 CSRF/XSRF 攻击
  • 安装 axios
    $ npm install axios
  • 在要使用的文件中引入axios
    import axios from 'axios'
  • GET请求
  1.  
    // 向具有指定ID的用户发出请求
  2.  
    axios.get('/user?ID=12345')
  3.  
    .then(function (response) {
  4.  
    console.log(response);
  5.  
    })
  6.  
    .catch(function (error) {
  7.  
    console.log(error);
  8.  
    });
  9.  
     
  10.  
    // 也可以通过 params 对象传递参数
  11.  
    axios.get('/user', {
  12.  
    params: {
  13.  
    ID: 12345
  14.  
    }
  15.  
    })
  16.  
    .then(function (response) {
  17.  
    console.log(response);
  18.  
    })
  19.  
    .catch(function (error) {
  20.  
    console.log(error);
  21.  
    });
  • POST请求
  1.  
    axios.post('/user', {
  2.  
    firstName: 'Fred',
  3.  
    lastName: 'Flintstone'
  4.  
    })
  5.  
    .then(function (response) {
  6.  
    console.log(response);
  7.  
    })
  8.  
    .catch(function (error) {
  9.  
    console.log(error);
  10.  
    });
  • 执行多个并发请求
  1.  
    function getUserAccount() {
  2.  
    return axios.get('/user/12345');
  3.  
    }
  4.  
     
  5.  
    function getUserPermissions() {
  6.  
    return axios.get('/user/12345/permissions');
  7.  
    }
  8.  
     
  9.  
    axios.all([getUserAccount(), getUserPermissions()])
  10.  
    .then(axios.spread(function (acct, perms) {
  11.  
    //两个请求现已完成
  12.  
    }));
  • axios API:可以通过将相关配置传递给 axios 来进行请求。
  1.  
    axios(config)
  2.  
    // 发送一个 POST 请求
  3.  
    axios({
  4.  
    method: 'post',
  5.  
    url: '/user/12345',
  6.  
    data: {
  7.  
    firstName: 'Fred',
  8.  
    lastName: 'Flintstone'
  9.  
    }
  10.  
    });
  1.  
    axios(url[, config])
  2.  
    // 发送一个 GET 请求 (GET请求是默认请求模式)
  3.  
    axios('/user/12345');

请求方法别名:

  1.  
    为了方便起见,已经为所有支持的请求方法提供了别名。
  2.  
    axios.request(config)
  3.  
    axios.get(url [,config])
  4.  
    axios.delete(url [,config])
  5.  
    axios.head(url [,config])
  6.  
    axios.post(url [,data [,config]])
  7.  
    axios.put(url [,data [,config]])
  8.  
    axios.patch(url [,data [,config]])
  9.  
    注意:当使用别名方法时,不需要在config中指定url,method和data属性。
  • 并发
    帮助函数处理并发请求。
    axios.all(iterable)
    axios.spread(callback)
  • 创建实例
    也可以使用自定义配置创建axios的新实例。
    axios.create([config])
  1.  
    var instance = axios.create({
  2.  
    baseURL: 'https://some-domain.com/api/',
  3.  
    timeout: 1000,
  4.  
    headers: {'X-Custom-Header': 'foobar'}
  5.  
    });
  • 实例方法
    可用的实例方法如下所示。 指定的配置将与实例配置合并。
  1.  
    axios#request(config)
  2.  
    axios#get(url [,config])
  3.  
    axios#delete(url [,config])
  4.  
    axios#head(url [,config])
  5.  
    axios#post(url [,data [,config]])
  6.  
    axios#put(url [,data [,config]])
  7.  
    axios#patch(url [,data [,config]])
  • 请求配置
    这些是用于发出请求的可用配置选项。 只有url是必需的。 如果未指定方法,请求将默认为GET。
  1.  
    {
  2.  
    // `url`是将用于请求的服务器URL
  3.  
    url: '/user',
  4.  
     
  5.  
    // `method`是发出请求时使用的请求方法
  6.  
    method: 'get', // 默认
  7.  
     
  8.  
    // `baseURL`将被添加到`url`前面,除非`url`是绝对的。
  9.  
    // 可以方便地为 axios 的实例设置`baseURL`,以便将相对 URL 传递给该实例的方法。
  10.  
    baseURL: 'https://some-domain.com/api/',
  11.  
     
  12.  
    // `transformRequest`允许在请求数据发送到服务器之前对其进行更改
  13.  
    // 这只适用于请求方法'PUT','POST'和'PATCH'
  14.  
    // 数组中的最后一个函数必须返回一个字符串,一个 ArrayBuffer或一个 Stream
  15.  
     
  16.  
    transformRequest: [function (data) {
  17.  
    // 做任何你想要的数据转换
  18.  
     
  19.  
    return data;
  20.  
    }],
  21.  
     
  22.  
    // `transformResponse`允许在 then / catch之前对响应数据进行更改
  23.  
    transformResponse: [function (data) {
  24.  
    // Do whatever you want to transform the data
  25.  
     
  26.  
    return data;
  27.  
    }],
  28.  
     
  29.  
    // `headers`是要发送的自定义 headers
  30.  
    headers: {'X-Requested-With': 'XMLHttpRequest'},
  31.  
     
  32.  
    // `params`是要与请求一起发送的URL参数
  33.  
    // 必须是纯对象或URLSearchParams对象
  34.  
    params: {
  35.  
    ID: 12345
  36.  
    },
  37.  
     
  38.  
    // `paramsSerializer`是一个可选的函数,负责序列化`params`
  39.  
    // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  40.  
    paramsSerializer: function(params) {
  41.  
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  42.  
    },
  43.  
     
  44.  
    // `data`是要作为请求主体发送的数据
  45.  
    // 仅适用于请求方法“PUT”,“POST”和“PATCH”
  46.  
    // 当没有设置`transformRequest`时,必须是以下类型之一:
  47.  
    // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  48.  
    // - Browser only: FormData, File, Blob
  49.  
    // - Node only: Stream
  50.  
    data: {
  51.  
    firstName: 'Fred'
  52.  
    },
  53.  
     
  54.  
    // `timeout`指定请求超时之前的毫秒数。
  55.  
    // 如果请求的时间超过'timeout',请求将被中止。
  56.  
    timeout: 1000,
  57.  
     
  58.  
    // `withCredentials`指示是否跨站点访问控制请求
  59.  
    // should be made using credentials
  60.  
    withCredentials: false, // default
  61.  
     
  62.  
    // `adapter'允许自定义处理请求,这使得测试更容易。
  63.  
    // 返回一个promise并提供一个有效的响应(参见[response docs](#response-api))
  64.  
    adapter: function (config) {
  65.  
    /* ... */
  66.  
    },
  67.  
     
  68.  
    // `auth'表示应该使用 HTTP 基本认证,并提供凭据。
  69.  
    // 这将设置一个`Authorization'头,覆盖任何现有的`Authorization'自定义头,使用`headers`设置。
  70.  
    auth: {
  71.  
    username: 'janedoe',
  72.  
    password: 's00pers3cret'
  73.  
    },
  74.  
     
  75.  
    // “responseType”表示服务器将响应的数据类型
  76.  
    // 包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  77.  
    responseType: 'json', // default
  78.  
     
  79.  
    //`xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称
  80.  
    xsrfCookieName: 'XSRF-TOKEN', // default
  81.  
     
  82.  
    // `xsrfHeaderName`是携带xsrf令牌值的http头的名称
  83.  
    xsrfHeaderName: 'X-XSRF-TOKEN', // default
  84.  
     
  85.  
    // `onUploadProgress`允许处理上传的进度事件
  86.  
    onUploadProgress: function (progressEvent) {
  87.  
    // 使用本地 progress 事件做任何你想要做的
  88.  
    },
  89.  
     
  90.  
    // `onDownloadProgress`允许处理下载的进度事件
  91.  
    onDownloadProgress: function (progressEvent) {
  92.  
    // Do whatever you want with the native progress event
  93.  
    },
  94.  
     
  95.  
    // `maxContentLength`定义允许的http响应内容的最大大小
  96.  
    maxContentLength: 2000,
  97.  
     
  98.  
    // `validateStatus`定义是否解析或拒绝给定的promise
  99.  
    // HTTP响应状态码。如果`validateStatus`返回`true`(或被设置为`null` promise将被解析;否则,promise将被
  100.  
    // 拒绝。
  101.  
    validateStatus: function (status) {
  102.  
    return status >= 200 && status < 300; // default
  103.  
    },
  104.  
     
  105.  
    // `maxRedirects`定义在node.js中要遵循的重定向的最大数量。
  106.  
    // 如果设置为0,则不会遵循重定向。
  107.  
    maxRedirects: 5, // 默认
  108.  
     
  109.  
    // `httpAgent`和`httpsAgent`用于定义在node.js中分别执行http和https请求时使用的自定义代理。
  110.  
    // 允许配置类似`keepAlive`的选项,
  111.  
    // 默认情况下不启用。
  112.  
    httpAgent: new http.Agent({ keepAlive: true }),
  113.  
    httpsAgent: new https.Agent({ keepAlive: true }),
  114.  
     
  115.  
    // 'proxy'定义代理服务器的主机名和端口
  116.  
    // `auth`表示HTTP Basic auth应该用于连接到代理,并提供credentials。
  117.  
    // 这将设置一个`Proxy-Authorization` header,覆盖任何使用`headers`设置的现有的`Proxy-Authorization` 自定义 headers。
  118.  
    proxy: {
  119.  
    host: '127.0.0.1',
  120.  
    port: 9000,
  121.  
    auth: : {
  122.  
    username: 'mikeymike',
  123.  
    password: 'rapunz3l'
  124.  
    }
  125.  
    },
  126.  
     
  127.  
    // “cancelToken”指定可用于取消请求的取消令牌
  128.  
    // (see Cancellation section below for details)
  129.  
    cancelToken: new CancelToken(function (cancel) {
  130.  
    })
  131.  
    }

使用 then 时,将收到如下响应:

  1.  
    axios.get('/user/12345')
  2.  
    .then(function(response) {
  3.  
    console.log(response.data);
  4.  
    console.log(response.status);
  5.  
    console.log(response.statusText);
  6.  
    console.log(response.headers);
  7.  
    console.log(response.config);
  8.  
    });
  • 配置默认值

1、全局axios默认值

  1.  
    axios.defaults.baseURL = 'https://api.example.com';
  2.  
    axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  3.  
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

2、自定义实例默认值

  1.  
    //在创建实例时设置配置默认值
  2.  
    var instance = axios.create({
  3.  
    baseURL:'https://api.example.com'
  4.  
    });
  5.  
    //在实例创建后改变默认值
  6.  
    instance.defaults.headers.common ['Authorization'] = AUTH_TOKEN;

3、配置优先级顺序
配置将与优先顺序合并。 顺序是lib / defaults.js中的库默认值,然后是实例的defaults属性,最后是请求的config参数。 后者将优先于前者。 这里有一个例子。

  1.  
    //使用库提供的配置默认值创建实例
  2.  
    //此时,超时配置值为`0`,这是库的默认值
  3.  
    var instance = axios.create();
  4.  
     
  5.  
    //覆盖库的超时默认值
  6.  
    //现在所有请求将在超时前等待2.5秒
  7.  
    instance.defaults.timeout = 2500;
  8.  
     
  9.  
    //覆盖此请求的超时,因为它知道需要很长时间
  10.  
    instance.get('/ longRequest',{
  11.  
    timeout:5000
  12.  
    });
  • 拦截器
    你可以截取请求或响应在被 then 或者 catch 处理之前
  1.  
    //添加请求拦截器
  2.  
    axios.interceptors.request.use(function(config){
  3.  
    //在发送请求之前做某事
  4.  
    return config;
  5.  
    },function(error){
  6.  
    //请求错误时做些事
  7.  
    return Promise.reject(error);
  8.  
    });
  9.  
     
  10.  
    //添加响应拦截器
  11.  
    axios.interceptors.response.use(function(response){
  12.  
    //对响应数据做些事
  13.  
    return response;
  14.  
    },function(error){
  15.  
    //请求错误时做些事
  16.  
    return Promise.reject(error);
  17.  
    });

如果你以后可能需要删除拦截器。

  1.  
    var myInterceptor = axios.interceptors.request.use(function () {/*...*/});
  2.  
    axios.interceptors.request.eject(myInterceptor);

你可以将拦截器添加到axios的自定义实例。

  1.  
    var instance = axios.create();
  2.  
    instance.interceptors.request.use(function () {/*...*/});
  • 处理错误
  1.  
    axios.get('/ user / 12345')
  2.  
    .catch(function(error){
  3.  
    if(error.response){
  4.  
    //请求已发出,但服务器使用状态代码进行响应
  5.  
    //落在2xx的范围之外
  6.  
    console.log(error.response.data);
  7.  
    console.log(error.response.status);
  8.  
    console.log(error.response.headers);
  9.  
    } else {
  10.  
    //在设置触发错误的请求时发生了错误
  11.  
    console.log('Error',error.message);
  12.  
    }}
  13.  
    console.log(error.config);
  14.  
    });

您可以使用validateStatus配置选项定义自定义HTTP状态码错误范围。

  1.  
    axios.get('/ user / 12345',{
  2.  
    validateStatus:function(status){
  3.  
    return status < 500; //仅当状态代码大于或等于500时拒绝
  4.  
    }}
  5.  
    })
  • 消除
    您可以使用取消令牌取消请求。

    axios cancel token API基于可取消的promise提议,目前处于阶段1
    您可以使用CancelToken.source工厂创建一个取消令牌,如下所示:

  1.  
    var CancelToken = axios.CancelToken;
  2.  
    var source = CancelToken.source();
  3.  
     
  4.  
    axios.get('/user/12345', {
  5.  
    cancelToken: source.token
  6.  
    }).catch(function(thrown) {
  7.  
    if (axios.isCancel(thrown)) {
  8.  
    console.log('Request canceled', thrown.message);
  9.  
    } else {
  10.  
    // 处理错误
  11.  
    }
  12.  
    });
  13.  
     
  14.  
    //取消请求(消息参数是可选的)
  15.  
    source.cancel('操作被用户取消。');
  16.  
     

您还可以通过将执行器函数传递给CancelToken构造函数来创建取消令牌:

  1.  
    var CancelToken = axios.CancelToken;
  2.  
    var cancel;
  3.  
     
  4.  
    axios.get('/ user / 12345',{
  5.  
    cancelToken:new CancelToken(function executor(c){
  6.  
    //一个执行器函数接收一个取消函数作为参数
  7.  
    cancel = c;
  8.  
    })
  9.  
    });
  10.  
     
  11.  
    // 取消请求
  12.  
    clear();

注意:您可以使用相同的取消令牌取消几个请求。

  • 使用application / x-www-form-urlencoded格式

默认情况下,axios将JavaScript对象序列化为JSON。 要以应用程序/ x-www-form-urlencoded格式发送数据,您可以使用以下选项之一。

1、浏览器
在浏览器中,您可以使用URLSearchParams API,如下所示:

  1.  
    var params = new URLSearchParams();
  2.  
    params.append('param1', 'value1');
  3.  
    params.append('param2', 'value2');
  4.  
    axios.post('/foo', params);
  5.  
    请注意,所有浏览器都不支持URLSearchParams,但是有一个polyfill可用(确保polyfill全局环境)。

或者,您可以使用qs库对数据进行编码:

  1.  
    var qs = require('qs');
  2.  
    axios.post('/foo', qs.stringify({ 'bar': 123 });

2、Node.js
在node.js中,可以使用querystring模块,如下所示:

  1.  
    var querystring = require('querystring');
  2.  
    axios.post('http://something.com/', querystring.stringify({ foo: 'bar' });

3、TypeScript
axios包括TypeScript定义。

  1.  
    import axios from 'axios';
  2.  
    axios.get('/user?ID=12345');

axios在很大程度上受到Angular提供的$http服务的启发。 最终,axios努力提供一个在Angular外使用的独立的$http-like服务。

vue-resource和axios区别的更多相关文章

  1. vue中使用axios

    1.结合vue-axios使用 vue-axios是按照vue插件的方式去写的,那么结合vue-axios就可以使用Vue.use()这个方法import axios from 'axios' imp ...

  2. vue全局使用axios插件请求ajax

    vue全局使用axios插件请求ajax Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方宣布停止更新vue-resource,并推 ...

  3. Spring中@Autowired注解、@Resource注解的区别 (zz)

    Spring中@Autowired注解.@Resource注解的区别 Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@ ...

  4. 【js】 ajax 与 axios 区别

    ajax 与 axios区别 Ajax: Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发 ...

  5. @Autowired @Resource @Qualifier的区别

    参考博文: http://www.cnblogs.com/happyyang/articles/3553687.html http://blog.csdn.net/revent/article/det ...

  6. vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件

    vue中创建路由 每一个vue组件都有三部分组成 template:放html代码 script:放js相关 style:放css相关 vue中创建路由 1.先创建组件 Course.vue 2.ro ...

  7. vue全局使用axios的方法

    在vue项目开发中,我们使用axios的二次封装,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from 'vu ...

  8. vue中采用axios发送请求及拦截器

    这几天在使用vue中axios发送get请求的时候很顺手,但是在发送post请求的时候老是在成功的回调函数里边返回参数不存在,当时就纳闷了,经过查阅资料,终于得到了解决方案,在此做一总结: 首先我们在 ...

  9. vue项目对axios的全局配置

    标准的vue-cli项目结构(httpConfig文件夹自己建的): api.js: //const apiUrl = 'http://test';//测试域名,自己改成自己的 const apiUr ...

随机推荐

  1. linux(centos 7) 下安装nodejs

    1,到node官网下载linux版本,有32和64位版本 2,将文件上传到linux下 3,使用tar -xvf node-v8.9.3-linux-x64.tar.xz 进行解压 4,建立软连接,变 ...

  2. nginx反向代理和tomcat集群(适用于ubutnu16.04及其centos7)

    下面示例,本人亲测有效 为什么要反向代理和集群? 因为并发问题,很多请求如果全部分发给一个tomcat,一个tomcat优化最好的话,据说可达到800负载,但是面对成千上万的请求,单单一个tomcat ...

  3. CentOS7+ anaconda3 + Python-3.6 + tensorflow-cpu-1.5安装和配置

    CentOS7+ anaconda3 + Python-3.6 + tensorflow-cpu-1.5安装和配置 ========================================== ...

  4. day08(补)

    今日学习内容 1.文件重写方法 2.函数基本知识 文件处理: 打开文件 读/写文件 关闭文件 文件指针移动,只有t模式下的read(n),n代表的字符个数其余都是以字节为单位 f.seek有两个参数( ...

  5. Found more than one concrete type for given DbContext Type (xxx.xxxx.xxx) define MultiTenancySideAttribute with Tenant

    错误提示: Found more than one concrete type for given DbContext Type (Abp.Zero.EntityFramework.AbpZeroCo ...

  6. 何谓BLDC电机?BLDC电机是如何旋转的?

    何谓BLDC电机?BLDC电机是如何旋转的?

  7. 详细解读Spark的数据分析引擎:Spark SQL

    一.spark SQL:类似于Hive,是一种数据分析引擎 什么是spark SQL? spark SQL只能处理结构化数据 底层依赖RDD,把sql语句转换成一个个RDD,运行在不同的worker上 ...

  8. 【CobaltStrike】CobaltStrike简介与使用

    CobaltStrike简介与使用 0x00 简介 1. 什么是CobaltStrike?可以用来做什么? CobatStrike是一款基于java编写的全平台多方协同后渗透攻击框架.CobaltSt ...

  9. 20155216 Exp7 网络欺诈技术防范

    Exp7 网络欺诈技术防范 基础问题回答 1.通常在什么场景下容易受到DNS spoof攻击? 1.在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充域名服务器,来发送伪造的数据包,从而 ...

  10. 汇编 fsub ,fmul,fdiv,fild,CVTTPS2PI 指令

    知识点:  浮点指令 fsub 一.浮点指令fsub 格式 fsub memvar // st0=st0-memvar 知识点:  浮点指令 fmul 一.浮点指令fmul 格式 fmul mem ...