手撕Ajax,Fetch,Axios(顶级理解)

51 阅读3分钟

概念

AJAX、Fetch和Axios都是用于在Web应用程序中执行异步HTTP请求的技术。它们都可以用于在不重新加载整个页面的情况下,从服务器加载和更新数据。也就是局部刷新技术,可以做到与服务器进行交互的技术

Ajax

  1. 它的全称是:Asynchronous Javascript And Xml,翻译过来就是异步的JavaScript和XML.是指一种创建交互式网页应用的网页开发技术, 可以访问服务器数据的局部刷新的技术

个人理解:即可以进行局部刷新的技术,又可以与服务器进行通信的技术

  1. Ajax是一个技术统称,是一种思想,它囊括了很多技术,不是特指某一种技术
  2. XMLHttpRequset是实现Ajax的一种方式,XMLHttpRequest 是一个 JavaScript 的对象,它为客户端提供了从服务器请求数据的能力。这种能力是现代 Web 应用中 Ajax(异步 JavaScript 和 XML)交互的基础.
  3. ajax的异步如何获取到数据?

使用onreadystatechange事件(事件队列event loop的宏任务),并结合callback回调函数获取数据

  1. ajax的同步,发送请求时会占据 (thread main)主线程,造成阻塞,不推荐使用

  2. 缺点:滥用回调函数会产生回调地狱问题,并且代码看起来不够清晰,可读性降低

Fetch

  1. Fetch 是在 ES6 出现的,它使用了 ES6 提出的 promise 对象。它是 XMLHttpRequest 的替代品。
  2. Fetch 是一个 API,它是真实存在的,它是基于 promise 的
  3. 特点:
    • 使用 promise,不使用回调函数。
    • 采用模块化设计,比如 rep、res 等对象分散开来,比较友好。
    • 通过数据流对象处理数据,可以提高网站性能。
  4. 它采用了.then 链式调用的方式处理结果,这样不仅利于代码的可读,而且也解决了回调地狱的问题

Axios

  1. Axios 是随着 Vue 的兴起而被广泛使用的,目前来说,绝大多数的 Vue 项目中的网络请求都是利用 Axios 发起的。当然它并不是一个思想,或者一个原生 API,它是一个封装库。

  2. Axios 是一个基于 promise 封装的网络请求库,它是基于 XHR 进行二次封装

  3. 特点:

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

简单区别:

简单对比:

网络请求特点
Ajax一种技术统称,主要利用XHR实现网络请求
Fetch具体API,基于promise,实现网络请求
Axios一个封装库,基于XHR封装,较为推荐使用

相关链接:

Ajax:Ajax - Web 开发者指南 | MDN (mozilla.org)

Fetch:使用 Fetch - Web API 接口参考 | MDN (mozilla.org)

Axios:Axios中文文档 | Axios中文网 | Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js (axios-http.cn)