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 都通用。

相关推荐
终端鹿3 小时前
Vue3 核心 API 完结篇:toRaw / markRaw / shallowReactive / shallowRef 等进阶响应式 API 详解
前端·javascript·vue.js
sunxunyong3 小时前
集群增加用户&权限
前端·javascript·vue.js
wuhen_n3 小时前
组件测试策略:测试 Props、事件和插槽
前端·javascript·vue.js
zhensherlock3 小时前
Protocol Launcher 系列:Pika 取色器的协议控制(上篇)
前端·javascript·macos·typescript·github·mac·view design
inksci3 小时前
推荐动态群聊二维码制作工具
前端·javascript·微信小程序
wuhen_n4 小时前
Vue3 单元测试实战:从组合式函数到组件
前端·javascript·vue.js
工程师老罗12 小时前
Image(图像)的用法
java·前端·javascript
早點睡39012 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-swiper
javascript·react native·react.js
jump_jump13 小时前
深入 JavaScript Iterator Helpers:从 API 到引擎实现
javascript·性能优化