Javascript提高:Promise、Fetch、Axios、XHR、jQuery AJAX 完整对比-由Deepseek产生

Promise、Fetch、Axios、XHR、jQuery AJAX 完整对比

我给你做最清晰、最直白、前端面试必问 的版本,一次性讲透它们的关系、区别、用法、优缺点


一、先搞懂它们的层级关系(最重要)

复制代码
底层:XHR(浏览器原生请求对象)
↑
封装1:jQuery AJAX(基于 XHR)
↑
新标准:Fetch(浏览器原生,基于 Promise)
↑
封装2:Axios(基于 XHR 封装,返回 Promise)
↑
语法糖:async/await(简化 Promise 写法)

一句话总结:

  • XHR:最原始、最底层
  • jQuery:老时代的封装
  • Fetch:浏览器原生新 API,Promise 风格
  • Axios:最流行、最强大、最推荐的请求库
  • Promise:异步处理方案,不是请求工具

二、核心区别对比表(直接背)

特性 XHR jQuery AJAX Fetch Axios
本质 原生请求对象 基于 XHR 封装 原生 Promise API 基于 XHR + Promise 封装
是否 Promise 老版本否,新版本支持
自动解析 JSON 需手动 .json()
请求拦截
响应拦截
取消请求 复杂 支持 支持 简单
超时处理 麻烦 支持 不支持 支持
错误处理 复杂 一般 只断网才 reject 状态码错误自动 reject
流行度 过时 过时 一般 最高
推荐度 不推荐 不推荐 一般 强烈推荐

三、每种写法示例(直观感受区别)

1. XHR(最原始,代码又臭又长)

js 复制代码
const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data');
xhr.onload = function () {
  if (xhr.status === 200) {
    const data = JSON.parse(xhr.responseText);
  }
};
xhr.send();

2. jQuery AJAX(曾经的王者)

js 复制代码
$.ajax({
  url: '/api/data',
  type: 'GET',
  success: (res) => { },
  error: (err) => { }
});

3. Fetch(原生 Promise,但坑很多)

js 复制代码
fetch('/api/data')
  .then(res => res.json()) // 必须手动转 JSON
  .then(data => { })
  .catch(err => { })

⚠️ Fetch 大坑

  • 404/500 不会进入 catch
  • 无法超时
  • 不支持请求拦截

4. Axios(最优雅、最强大)

js 复制代码
axios.get('/api/data')
  .then(res => {
    // 直接拿到数据,无需解析
  })
  .catch(err => {
    // 错误统一捕获
  });

四、最重要的 4 个区别(面试高频)

1. 错误处理机制不同

  • XHR / Fetch:404、500 不算错误
  • Axios :只要状态码不是 2xx,自动进入 catch

2. 数据处理不同

  • Axios:自动转 JSON
  • Fetch :必须手动调用 .json()
  • XHR :必须手动 JSON.parse()

3. 功能强弱不同

  • Axios 独有的王牌功能
    • 请求/响应拦截器
    • 取消请求
    • 超时设置
    • 防止 XSRF
    • 并发请求
  • Fetch / XHR / jQuery 都没有这些功能

4. 使用场景不同

  • XHR:底层原理,几乎不用
  • jQuery:老项目维护
  • Fetch:不想引库、简单需求
  • Axios企业开发、Vue/React 项目、99% 前端首选

五、最终结论(最实用)

  1. 日常开发永远首选 Axios
  2. Fetch 是原生但不好用
  3. XHR 是底层原理
  4. jQuery 已经过时
  5. Promise 是异步基础,不是请求工具

总结

  • XHR:最原始请求方式
  • jQuery:基于 XHR 的旧封装
  • Fetch:浏览器原生 Promise API
  • Axios :基于 XHR + Promise 的最强请求库
  • Promise:异步解决方案,被 Fetch/Axios 使用

超清晰总结:Promise / XHR / Fetch / Axios / jQuery 在 浏览器Node.js 环境是否可用

我直接给你最准确、最实用、面试必背的结论👇


1. 一句话总表(直接背)

技术 浏览器 Node.js 说明
Promise ✅ 支持 ✅ 支持 两者都是原生 JS
XHR ✅ 支持 不支持 浏览器专属对象
Fetch ✅ 支持 ⚠️ 需安装 浏览器原生;Node 需第三方包
Axios ✅ 支持 ✅ 支持 跨平台之王,双环境完美运行
jQuery AJAX ✅ 支持 几乎不用 专为浏览器设计

2. 逐个详细说明

① Promise

  • 浏览器:✅ 支持(所有现代浏览器 + IE11+)
  • Node.js:✅ 支持(v4+ 就支持)
  • 结论双环境通用,是异步基础。

② XHR(XMLHttpRequest)

  • 浏览器:✅ 原生支持
  • Node.js :❌ 没有这个对象
  • 结论浏览器专属,Node 不能直接用。

③ Fetch

  • 浏览器:✅ 原生支持(现代浏览器)
  • Node.js :⚠️ 默认不自带 ,必须安装 node-fetch
  • 结论:浏览器原生;Node 需要额外安装。

④ Axios(最重要)

  • 浏览器:✅ 原生支持(底层用 XHR)
  • Node.js:✅ 原生支持(底层用 http 模块)
  • 结论唯一真正双环境零配置通用
    自动适配环境,不用改代码!

⑤ jQuery AJAX

  • 浏览器:✅ 支持
  • Node.js:❌ 不支持(不适合服务端)
  • 结论浏览器专用,服务端不用。

3. 最关键结论(必须记住)

  1. Axios 是唯一在浏览器 + Node.js 都能直接用的请求库
  2. XHR、jQuery 只在浏览器能用
  3. Fetch 浏览器原生,Node 要装包
  4. Promise 两边都能用

最终记忆口诀

Axios 双环境,XHR 浏览器,Fetch 要安装,Promise 都通用。

相关推荐
zhangyao9403308 小时前
开发pc端时,表格的高度怎么设置才能铺满页面
前端·javascript·elementui
XinZong9 小时前
实测OpenClaw虾淘:全民工具AI时代,冷门非工具类的Skill还能出圈吗?
javascript
烛衔溟9 小时前
TypeScript 类的类型 —— 作为类型使用
javascript·ubuntu·typescript
之歆9 小时前
Day16_JavaScript 轮播图与事件工程实战(下篇)
服务器·开发语言·前端·javascript·网络·性能优化
kyriewen10 小时前
我关掉了Copilot:因为我写的代码出现在了别人的建议里
前端·javascript·ai编程
SmartRadio10 小时前
STM32WLE5 LoRa Smart TDMA 完整协议栈实现(工程级可直接编译)-【1】
javascript·stm32·单片机·嵌入式硬件·lora·自组网·smart tdma
竹林81811 小时前
用 wagmi v2 踩坑两天,我终于搞懂了多链钱包切换
前端·javascript
子云zy11 小时前
JS 对象与包装类:new 做了什么?字符串为什么有 length?
前端·javascript
茶底世界之下13 小时前
你的 Mac 里,藏着一支 AI 开发团队
前端·javascript
小白学大数据13 小时前
Playwright 爬虫:Python 爬取 JS 渲染的 JSP 网站
开发语言·javascript·爬虫·python·数据分析