ajax、axios、fetch区别

本文对比了jQuery的AJAX、axios和fetch三种前端HTTP请求方法的优缺点。AJAX适用于MVC模式,但不适应MVVM潮流,且依赖整个jQuery库。axios支持Promise,提供拦截器和错误处理,适合现代前端开发。fetch作为新的标准,直接创建XMLHttpRequest,但对错误处理和进度监测不足,需要额外处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jQuery ajax

$.ajax({
   type: 'POST',
   url: url,
   data: data,
   dataType: dataType,
   success: function () {},
   error: function () {}
});

优缺点:

  • 本身是针对MVC的编程,不符合现在前端MVVM的浪潮
  • 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
  • JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)

axios

axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

优缺点:

  • 从浏览器中创建 XMLHttpRequest
  • node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止CSRF/XSRF

fetch

try {
  let response = await fetch(url);
  let data = response.json();
  console.log(data);
} catch(e) {
  console.log("Oops, error", e);

}

优缺点:

  • fetcht只对网络请求报错,对400500都当做成功的请求,需要封装去处理
  • fetch默认不会带cookie,需要添加配置项
  • fetch不支持abort,不支持超时控制,使用setTimeoutPromise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费
  • fetch没有办法原生监测请求的进度,而XHR可以
AjaxAxiosFetch都是用于在Web应用程序中进行异步HTTP请求的技术。它们在实现方式和使用方式上有所不同,但都旨在提升用户体验,使网页能够与服务器进行数据交互而无需刷新整个页面。 1. **Ajax(Asynchronous JavaScript and XML)**: - Ajax是一种在不重新加载整个网页的情况下,与服务器交换数据并更新部分网页的技术。 - 最早的Ajax实现是通过XMLHttpRequest(XHR)对象进行的。 - 优点:可以在不刷新整个页面的情况下更新内容,提高了用户体验。 - 缺点:API较为复杂,兼容性较差,需要处理跨域问题。 2. **Axios**: - Axios是一个基于Promise的HTTP客户端,可以在浏览器和Node.js中使用。 - 提供了更简洁的API,支持请求和响应的拦截、取消请求、自动转换JSON数据等功能。 - 优点:语法简洁,易于使用,支持Promise,支持请求和响应拦截,兼容性更好。 - 缺点:需要引入额外的库,增加了项目的依赖。 3. **Fetch**: - Fetch是现代浏览器提供的用于进行网络请求的接口,基于Promise。 - 提供了更简洁和现代的API,使用起来比XMLHttpRequest更方便。 - 优点:语法简洁,基于Promise,支持Promise链式调用,内置于现代浏览器中。 - 缺点:不支持旧版浏览器,需要手动处理JSON数据的转换,错误处理机制较为复杂。 ### 示例代码 **Ajax(使用XMLHttpRequest):** ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.example.com/data', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send(); ``` **Axios:** ```javascript axios.get('https://api.example.com/data') .then(function(response) { console.log(response.data); }) .catch(function(error) { console.log(error); }); ``` **Fetch:** ```javascript fetch('https://api.example.com/data') .then(function(response) { return response.json(); }) .then(function(data) { console.log(data); }) .catch(function(error) { console.log(error); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码哥・Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值