1、ajax
本身是针对MVC的编程,不符合现在前端MVVM的浪潮
基于原生的XHR开发,XHR本身的架构不够清晰,已经有了fetch的替代方案
2、fetch
fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中Promise对象
fetch的代码结构笔记ajax简单多了,但
fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象
优点:
- 符合关注分离: 没有将输入、输出和用事件来跟踪的状态混杂在一个对象里
- 更加底层,提供的API丰富,是更好更方便的写法
- 脱离了XHR,是ES规范里新的实现方式
缺点
- fetch只对网络请求报错,对400、500都当成成功的请求,需要封装去处理
- fetch默认不会带cookie,需要添加配置项
- fetch不支持 abort(中止) 、不支持超时控制,使用
setTimeout
及Promise.reject
实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费- fetch不能原生检测请求的进度,而XHR可以
3、axios
Axios是一个基于promise的HTTP库,可以在浏览器和Nodejs中使用
特性
- 从浏览器中创建
XMLHttpRequests
- 从Node.js中创建http请求
- 支持Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换JSON数据
- 客户端支持防御XSRF
XSRF
: 跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
优缺点
- 从Nodejs创建http请求
- 支持Promise API
- 客户端支持防止CSRF
- 提供了一些并发请求的接口