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 相关文章推荐
flash 得到自身url参数的代码
Nov 15 Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
基于BootStarp的Dailog
Apr 28 Javascript
对于Javascript 执行上下文的全面了解
Sep 05 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
Mar 13 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
vue实现移动端返回顶部
Oct 12 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
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP实现AES256加密算法实例
2014/09/22 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
setInterval 和 setTimeout会产生内存溢出
2008/02/15 Javascript
jQuery live
2009/05/15 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python实现石头剪刀布程序
2021/01/20 Python
python redis 删除key脚本的实例
2019/02/19 Python
python实现字符串加密成纯数字
2019/03/19 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
python3安装crypto出错及解决方法
2019/07/30 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
python中count函数知识点浅析
2020/12/17 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
数据库方面面试题
2012/04/22 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
库房管理员岗位职责
2014/03/09 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
提档介绍信范文
2015/10/22 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript