前言
一直听说用Axios来发送http请求有很多优点,之前只是随大流简单的使用了下,最近因为项目调整前端这块需求减少,那么闲下来总得找点事干(毕竟旁边坐着老大呢,还有老大的老大~),解惑是个很不错的选择,所以就查找资料写了这篇Axios的调研博客,目的是为了降低下次使用的时间成本。
相关参考文章
Jquery ajax, Axios, Fetch区别之我见
定义
- Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
- 本质上也是对原生XHR的封装,但它是Promise的实现版本,符合最新的ES规范
特性
- 支持在node.js中创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换 JSON 数据
- 客户端支持防止CSRF
- 提供了一些并发请求的接口(重要,方便了很多的操作)
1 | 支持防止CSRF,就是让每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到cookie中得key的,这样后台就可辨别请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。 |
具体功能
get请求
1 | import axios from 'axios' |
post请求
1 | axios.post(url【, qs.stringify(params)】) |
并发请求
1 | function getUserAccount() { |
请求拦截
1 | // 添加请求拦截器 |
创建实例
1 | // 利用实例可以设置些公共配置 |
使用
1 | import axios from 'axios' |
Jquery ajax 和 Fetch优缺点
Jquery ajax
1
2
3
4
5
6
7
8介绍:
是对原生XHR的封装
优点:
使用方便,支持JSONP请求
缺点:
本身是针对MVC的编程,不符合现在前端MVVM的浪潮
基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
只使用ajax而引入整个JQuery太大(采取个性化打包的方案又不能享受CDN服务)Fetch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22介绍(结合下面代码了解):
符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里;
更好更方便的写法;
try {
let response = await fetch(url);
let data = response.json();
console.log(data);
} catch(e) {
console.log("Oops, error", e);
}
优点:
更加底层,提供的API丰富(request, response)
脱离了XHR,是ES规范里新的实现方式
缺点:
低层次的API,可考虑成原生的XHR,使用起来不舒服,需要进行封装
1)fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理
2)fetch默认不会带cookie,需要添加配置项
3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费
4)fetch没有办法原生监测请求的进度,而XHR可以
注:fetch在前端的应用上有一项xhr怎么也比不上的能力:跨域的处理。