ajax、fetch、axios区别

注:下面我们都以post请求为例,且不适用async/await

1.ajax(jquery)

$.ajax({
type: ‘POST’,
url: url,
data: data,
dataType: dataType,
success: function(){}, // 成功
error: function(){} // 失败
});
ajax的核心是XmlHttpRequest。简单的说就是通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后操作Dom,从而更新页面,以实现客户端与服务端的异步通信,使用Iframe使页面实现了局部刷新,避免了早期页面需要重载页面刷新数据的问题,提升了用户体验。jquery ajax是对原生XHR的封装,还增加了对JSONP的支持,随着不断更新和维护,使用已经变得很方便。

缺点:

1)ajax不支持back按钮

2)ajax针对于MVC变成,不符合现在主流的MVVM浪潮

3)核心XmlHttpRequest,XHR本身架构不清晰,很多人都说被fetch方案代替,作为萌新,我也不了解,还是成长一番后再来评判吧。。。

4)格式零散,配置和调用方式混乱

很多文章中都提到了ajax不安全,但对于ajax的不安全,作为萌新我也存在疑问,哪里不安全?因此,我就查了一些资料。。。还是没能 找到答案。Google、百度一搜,千篇一律,文章一大堆,不过好像都是高手在为ajax甩锅,分析CSRF、XSS、SQL注入等,最终结论就是:Web后台更安全,则AJAX请求也更安全,反之后台有漏洞,不管怎么样都是不安全的

2.fetch

fetch(url,{method:‘post’})
.then(function (response) {
// 除了json()还有arrayBuffer()、blob()、text()、formData()
return response.json()
})
.then(function (myJson) {
console.log(myJson);
});
fetch给予Promise实现,脱离了XHR,提供了丰富的API,也支持ES7的asyn/await。fetch提供了四种请求方式GET、POST、PUT、DELETE,默认为GET。如需改变,需要通过method配置(如上:示例)。另外还需要注意的是:fetch第一个then()得到的数据是Promise对象,顾要再通过一个then()获得可用数据,这也是两个then()的原因。

缺点:

1)fetchtch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理

2)fetch默认不会带cookie,需要添加配置项

3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费

4)fetch没有办法原生监测请求的进度,而XHR可以

5)IE不支持原生fetch

3.axios

axios.post(url, { id: 1, name: ‘杨少通’ }).then(res => {
myConsole.dataConsole(res);
})
第一次接触axios是去年项目里用到的,体验确实不错。这里简单介绍一下。

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范。axios增加了拦截器,其中包括响应拦截器和请求拦截器,极大的方便了对请求的统一配置和对响应数据的统一处理。

为什么优选axios呢?

1.从浏览器中创建 XMLHttpRequest
2.支持 Promise API
3.客户端可从Cooke中获得一个Key,根据浏览器同源策略,冒充者拿不到这个Key,顾后台可轻松辨别访问是否是从危险网站误导输入的,从而很好的防止了CSRF
4.提供了一些并发请求的接口
5.从 node.js 创建 http 请求
6.请求拦截器、响应拦截器
7.转换请求和响应数据
8.取消请求
9.自动转换JSON数据

更多可查看axios文档:https://www.kancloud.cn/yunye/axios/234845

Vue之父尤雨溪也推荐大家使用axios哦~~

如有转载请注明来源(洋葱先生:http://www.dreamload.cn/blog/?p=999)

猜你喜欢

转载自blog.csdn.net/Kindergarten_Sir/article/details/108601656
今日推荐