欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ajax、fetch和axios的区别

程序员文章站 2024-03-24 19:29:40
...

一、jQuery ajax

1.介绍

  • 统 Ajax 指的是 XMLHttpRequest(XHR),核心使用XMLHttpRequest对象;
  • 增加了对JSONP的支持

2.缺点

  • 本身是针对MVC的编程,不符合现在前端**MVVM(Model-View-ViewModel)**的浪潮;
    • VVM 的核心是 ViewModel 层,它就像是一个中转站(value converter),负责转换 Model 中的数据对象来让数据变得更容易管理和使用;
    • ViewModel 层向上与视图层进行双向数据绑定,向下与 Model 层通过接口请求进行数据交互,起呈上启下作用;
    • View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与 Model 层交互,这就完全解耦了 View 层和 Model 层

ajax、fetch和axios的区别

  • 基于原生的XHR开发,XHR本身的架构不清晰。
  • JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务);
  • 不符合关注分离(Separation of Concerns)的原则;
  • 配置和调用方式非常混乱,而且基于事件的异步模型不友好;
$.ajax({
   type: 'POST',
   url: url,
   data: data,
   dataType: dataType,
   success: function () {},
   error: function () {}
});

二、axios

1.介绍

  • 是一个基于Promise用于浏览器和nodejs的HTTP客户端,本质也是对原生XHR的封装;只不过是Promise的实现版本,符合最新的ES规范;

2.特征

  • 从浏览器中创建 XMLHttpRequest;
  • 支持 Promise API;
  • 客户端支持防止CSRF
    • 就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略
  • 提供了一些并发请求的接口(重要,方便了很多的操作)
  • 从 node.js 创建 http 请求
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

三、fetch

1.介绍

  • 使用了ES6中的promise对象;
  • fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象

2.优点

  • 语法简洁,更加语义化
  • 基于标准 Promise 实现,支持 async/await
  • 同构方便,使用 isomorphic-fetch
  • 更加底层,提供的API丰富(request, response)
  • 脱离了XHR,是ES规范里新的实现方式

3.缺点

  • fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject;
  • fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: ‘include’})
  • fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费;
  • fetch没有办法原生监测请求的进度,而XHR可以;
try {
  let response = await fetch(url);
  let data = response.json();
  console.log(data);
} catch(e) {
  console.log("Oops, error", e);
}

此文章为作者根据网上文章整理的学习笔记,如有侵权,请联系作者删除。

相关标签: 异步请求 ajax