Vue官方推荐AJAX组件axios.js使用方法详解与API


Posted in Javascript onOctober 09, 2018

Axios.js作为Vue官方插件的AJAX组件其主要有以下几个特点:

1、比Jquery轻量,但处理请求不多的时候,可以使用

2、基于Promise语法标准

3、支持nodejs

4、自动转换JSON数据

Axios.js用法

axios提供了一下几种请求方式

axios.request(config) 
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])

1、发送一个GET请求

//通过给定的ID来发送请求
axios.get('/user?ID=12345')
 .then(function(response){
  console.log(response);
 })
 .catch(function(err){
  console.log(err);
 });
//以上请求也可以通过这种方式来发送
axios.get('/user',{
 params:{
  ID:12345
 }
})
.then(function(response){
 console.log(response);
})
.catch(function(err){
 console.log(err);
});

2、 发送一个POST请求

axios.post('/user',{
 firstName:'Fred',
 lastName:'Flintstone'
})
.then(function(res){
 console.log(res);
})
.catch(function(err){
 console.log(err);
});

3、 一次性并发多个请求

function getUserAccount(){
 return axios.get('/user/12345');
}
function getUserPermissions(){
 return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(),getUserPermissions()])
 .then(axios.spread(function(acct,perms){
  //当这两个请求都完成的时候会触发这个函数,两个参数分别代表返回的结果
 }))

axios的API

(一) axios可以通过配置(config)来发送请求

1、 axios(config)

//发送一个`POST`请求
axios({
  method:"POST",
  url:'/user/12345',
  data:{
    firstName:"Fred",
    lastName:"Flintstone"
  }
});

2、 axios(url[,config])

//发送一个`GET`请求(默认的请求方式)
axios('/user/12345');

(二)、 请求方式的别名,这里对所有已经支持的请求方式都提供了方便的别名

axios.request(config);
 
axios.get(url[,config]);
 
axios.delete(url[,config]);
 
axios.head(url[,config]);
 
axios.post(url[,data[,config]]);
 
axios.put(url[,data[,config]])
 
axios.patch(url[,data[,config]])

注意:当我们在使用别名方法的时候,url,method,data这几个参数不需要在配置中声明

(三)、 并发请求(concurrency),即是帮助处理并发请求的辅助函数

//iterable是一个可以迭代的参数如数组
axios.all(iterable)
//callback要等到所有请求都完成才会执行
axios.spread(callback)

(四)、创建一个axios实例,并且可以自定义其配置

1、 axios.create([config])

var instance = axios.create({
 baseURL:"https://some-domain.com/api/",
 timeout:1000,
 headers: {'X-Custom-Header':'foobar'}
});

2、 实例的方法

一下是实例方法,注意已经定义的配置将和利用create创建的实例的配置合并

axios#request(config)
 
axios#get(url[,config])
 
axios#delete(url[,config])
 
axios#head(url[,config])
 
axios#post(url[,data[,config]])
 
axios#put(url[,data[,config]])
 
axios#patch(url[,data[,config]])

Axios请求的配置(request config)

以下就是请求的配置选项,只有url选项是必须的,如果method选项未定义,那么它默认是以GET的方式发出请求

{
 //`url`是请求的服务器地址
 url:'/user',
 //`method`是请求资源的方式
 method:'get'//default
 //如果`url`不是绝对地址,那么`baseURL`将会加到`url`的前面
 //当`url`是相对地址的时候,设置`baseURL`会非常的方便
 baseURL:'https://some-domain.com/api/',
 //`transformRequest`选项允许我们在请求发送到服务器之前对请求的数据做出一些改动
 //该选项只适用于以下请求方式:`put/post/patch`
 //数组里面的最后一个函数必须返回一个字符串、-一个`ArrayBuffer`或者`Stream`
 transformRequest:[function(data){
  //在这里根据自己的需求改变数据
  return data;
 }],
 //`transformResponse`选项允许我们在数据传送到`then/catch`方法之前对数据进行改动
 transformResponse:[function(data){
  //在这里根据自己的需求改变数据
  return data;
 }],
 //`headers`选项是需要被发送的自定义请求头信息
 headers: {'X-Requested-With':'XMLHttpRequest'},
 //`params`选项是要随请求一起发送的请求参数----一般链接在URL后面
 //他的类型必须是一个纯对象或者是URLSearchParams对象
 params: {
  ID:12345
 },
 //`paramsSerializer`是一个可选的函数,起作用是让参数(params)序列化
 //例如(https://www.npmjs.com/package/qs,http://api.jquery.com/jquery.param)
 paramsSerializer: function(params){
  return Qs.stringify(params,{arrayFormat:'brackets'})
 },
 //`data`选项是作为一个请求体而需要被发送的数据
 //该选项只适用于方法:`put/post/patch`
 //当没有设置`transformRequest`选项时dada必须是以下几种类型之一
 //string/plain/object/ArrayBuffer/ArrayBufferView/URLSearchParams
 //仅仅浏览器:FormData/File/Bold
 //仅node:Stream
 data {
  firstName:"Fred"
 },
 //`timeout`选项定义了请求发出的延迟毫秒数
 //如果请求花费的时间超过延迟的时间,那么请求会被终止
 
 timeout:1000,
 //`withCredentails`选项表明了是否是跨域请求
 
 withCredentials:false,//default
 //`adapter`适配器选项允许自定义处理请求,这会使得测试变得方便
 //返回一个promise,并提供验证返回
 adapter: function(config){
  /*..........*/
 },
 //`auth`表明HTTP基础的认证应该被使用,并提供证书
 //这会设置一个authorization头(header),并覆盖你在header设置的Authorization头信息
 auth: {
  username:"zhangsan",
  password: "s00sdkf"
 },
 //返回数据的格式
 //其可选项是arraybuffer,blob,document,json,text,stream
 responseType:'json',//default
 //
 xsrfCookieName: 'XSRF-TOKEN',//default
 xsrfHeaderName:'X-XSRF-TOKEN',//default
 //`onUploadProgress`上传进度事件
 onUploadProgress:function(progressEvent){
  //下载进度的事件
onDownloadProgress:function(progressEvent){
}
 },
 //相应内容的最大值
 maxContentLength:2000,
 //`validateStatus`定义了是否根据http相应状态码,来resolve或者reject promise
 //如果`validateStatus`返回true(或者设置为`null`或者`undefined`),那么promise的状态将会是resolved,否则其状态就是rejected
 validateStatus:function(status){
  return status >= 200 && status <300;//default
 },
 //`maxRedirects`定义了在nodejs中重定向的最大数量
 maxRedirects: 5,//default
 //`httpAgent/httpsAgent`定义了当发送http/https请求要用到的自定义代理
 //keeyAlive在选项中没有被默认激活
 httpAgent: new http.Agent({keeyAlive:true}),
 httpsAgent: new https.Agent({keeyAlive:true}),
 //proxy定义了主机名字和端口号,
 //`auth`表明http基本认证应该与proxy代理链接,并提供证书
 //这将会设置一个`Proxy-Authorization` header,并且会覆盖掉已经存在的`Proxy-Authorization` header
 proxy: {
  host:'127.0.0.1',
  port: 9000,
  auth: {
   username:'skda',
   password:'radsd'
  }
 },
 //`cancelToken`定义了一个用于取消请求的cancel token
 //详见cancelation部分
 cancelToken: new cancelToken(function(cancel){
 
 })
}

Axios请求返回的内容

{
 
 data:{},
 status:200,
 //从服务器返回的http状态文本
 statusText:'OK',
 //响应头信息
 headers: {},
 //`config`是在请求的时候的一些配置信息
 config: {}
}

你可以这样来获取响应信息

axios.get('/user/12345')
 .then(function(res){
  console.log(res.data);
  console.log(res.status);
  console.log(res.statusText);
  console.log(res.headers);
  console.log(res.config);
 })

Axios默认配置

你可以设置默认配置,对所有请求都有效

1、 全局默认配置

axios.defaults.baseURL = 'http://api.exmple.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['content-Type'] = 'appliction/x-www-form-urlencoded';

2、 自定义的实例默认设置

//当创建实例的时候配置默认配置
var instance = axios.create({
  baseURL: 'https://api.example.com'
});
 
//当实例创建时候修改配置
instance.defaults.headers.common["Authorization"] = AUTH_TOKEN;

3、 配置中的有优先级

config配置将会以优先级别来合并,顺序是lib/defauts.js中的默认配置,然后是实例中的默认配置,最后是请求中的config参数的配置,越往后等级越高,后面的会覆盖前面的例子。

//创建一个实例的时候会使用libray目录中的默认配置
//在这里timeout配置的值为0,来自于libray的默认值
var instance = axios.create();
//回覆盖掉library的默认值
//现在所有的请求都要等2.5S之后才会发出
instance.defaults.timeout = 2500;
//这里的timeout回覆盖之前的2.5S变成5s
instance.get('/longRequest',{
 timeout: 5000
});

Axios拦截器

你可以在请求、响应在到达then/catch之前拦截他们

//添加一个请求拦截器
axios.interceptors.request.use(function(config){
 //在请求发出之前进行一些操作
 return config;
},function(err){
 //Do something with request error
 return Promise.reject(error);
});
//添加一个响应拦截器
axios.interceptors.response.use(function(res){
 //在这里对返回的数据进行处理
 return res;
},function(err){
 //Do something with response error
 return Promise.reject(error);
})

Axios取消拦截器

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

3、 给自定义的axios实例添加拦截器

var instance = axios.create();
instance.interceptors.request.use(function(){})

Axios错误处理

axios.get('/user/12345')
 .catch(function(error){
  if(error.response){
   //请求已经发出,但是服务器响应返回的状态吗不在2xx的范围内
   console.log(error.response.data);
   console.log(error.response.status);
   console.log(error.response.header);
  }else {
   //一些错误是在设置请求的时候触发
   console.log('Error',error.message);
  }
  console.log(error.config);
 });

Axios取消请求

你可以通过一个cancel token来取消一个请求

你可以通过CancelToken.source工厂函数来创建一个cancel token

var CancelToken = axios.CancelToken;
var source = CancelToken.source();
 
axios.get('/user/12345',{
 cancelToken: source.token
}).catch(function(thrown){
 if(axios.isCancel(thrown)){
  console.log('Request canceled',thrown.message);
 }else {
  //handle error
 }
});
 
//取消请求(信息的参数可以设置的)
source.cance("操作被用户取消");

你可以给cancelToken构造函数传递一个executor function来创建一个cancel token:

var cancelToken = axios.CancelToken;
var cance;
axios.get('/user/12345',{
 cancelToken: new CancelToken(function(c){
  //这个executor函数接受一个cancel function作为参数
  cancel = c;
 })
})
//取消请求
cancel();

以上即是Axios.js的详细使用方法与API,想了解更多关于Axios.js库的相关知识点击下面的相关文章

Javascript 相关文章推荐
JQuery中$之选择器用法介绍
Apr 05 Javascript
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
JS显示表格内指定行html代码的方法
Mar 31 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
关于使用js算总价的问题
Jun 23 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
Feb 08 Javascript
微信小程序 接入腾讯地图的两种写法
Jan 12 Javascript
小程序实现列表倒计时功能
Jan 29 Javascript
vue router 源码概览案例分析
Oct 09 #Javascript
Angular4 Select选择改变事件的方法
Oct 09 #Javascript
对angular 监控数据模型变化的事件方法$watch详解
Oct 09 #Javascript
JS判断用户用的哪个浏览器实例详解
Oct 09 #Javascript
vue发送ajax请求详解
Oct 09 #Javascript
AngularJS 监听变量变化的实现方法
Oct 09 #Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 #Javascript
You might like
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue实现井字棋游戏
2020/09/29 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
分享Python文本生成二维码实例
2016/01/06 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
python输入中文的实例方法
2020/09/14 Python
数据库测试通常都包括哪些方面
2015/11/30 面试题
采购部主管岗位职责
2014/01/01 职场文书
药品采购员岗位职责
2014/02/08 职场文书
学校师德承诺书
2014/05/23 职场文书
大专学生求职自荐信
2014/07/06 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
认错检讨书
2014/10/02 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS