ajax、axios、fetch有什么区别?
参考答案:
(1)AJAX
Ajax 即“AsynchronousJavascriptAndXML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。它是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。其缺点如下:
- 本身是针对MVC编程,不符合前端MVVM的浪潮
- 基于原生XHR开发,XHR本身的架构不清晰
- 不符合关注分离(Separation of Concerns)的原则
- 配置和调用方式非常混乱,而且基于事件的异步模型不友好。
(2)Fetch
fetch号称是AJAX的替代品,是在ES6出现的,使用了ES6中的promise对象。Fetch是基于promise设计的。Fetch的代码结构比起ajax简单多。fetch不是ajax的进一步封装,而是原生js,没有使用XMLHttpRequest对象。
fetch的优点:
- 语法简洁,更加语义化
- 基于标准 Promise 实现,支持 async/await
- 更加底层,提供的API丰富(request, response)
- 脱离了XHR,是ES规范里新的实现方式
fetch的缺点:
- fetch只对网络请求报错,对400,500都当做成功的请求,服务器返回 400,500 错误码时并不会 reject,只有网络错误这些导致请求不能完成时,fetch 才会被 reject。
- fetch默认不会带cookie,需要添加配置项: fetch(url, {credentials: 'include'})
- fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了流量的浪费
- fetch没有办法原生监测请求的进度,而XHR可以
(3)Axios
Axios 是一种基于Promise封装的HTTP客户端,其特点如下:
- 浏览器端发起XMLHttpRequests请求
- node端发起http请求
- 支持Promise API
- 监听请求和返回
- 对请求和返回进行转化
- 取消请求
- 自动转换json数据
- 客户端支持抵御XSRF攻击
题目要点:
AJAX
- 定义:AJAX 是一种用于创建交互式网页的技术,它通过在后台与服务器进行数据交换,实现网页的部分更新,而不需要重新加载整个页面。
- 优点:
- 提高网页的交互性和用户体验。
- 减轻服务器和网络的负担,因为不需要每次交互都加载整个页面。
- 缺点:
- 原生 XHR 架构不清晰,配置和调用方式混乱。
- 不符合关注分离的原则。
- 不利于MVVM架构的前端开发。
Fetch API
- 定义:Fetch API 是现代浏览器提供的一种用于在浏览器中与服务器交换数据的机制,它取代了传统的 XMLHttpRequest 对象。
- 优点:
- 语法简洁,基于 Promise 实现,支持 async/await。
- 提供丰富的 API,如 request 和 response。
- 是 ES 规范中的新实现方式,与原生 JavaScript 更贴合。
- 缺点:
- 默认不处理错误状态码,如 400 或 500。
- 不支持自动带上 cookie。
- 不支持超时控制和取消请求。
- 无法原生监测请求进度。
Axios
- 定义:Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js,它可以拦截请求和响应,自动转换 JSON 数据,并且可以抵御 XSRF 攻击。
- 优点:
- 浏览器端和 node.js 端都可以使用。
- 支持 Promise API,易于使用。
- 支持拦截请求和响应。
- 自动转换 JSON 数据。
- 支持抵御 XSRF 攻击。
- 缺点:
- 虽然基于原生 XHR,但提供了更友好的 API。
- 功能强大,但可能增加学习成本。
AJAX 是传统的解决方案,Fetch API 是现代浏览器推荐的新标准,而 Axios 是一个更强大的库,提供了一系列的便捷功能。在实际开发中,应根据项目需求和团队熟悉度选择合适的技术。