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

相关推荐
柚yuzumi12 分钟前
变量明明定义了,为什么访问不到?深入理解 JavaScript 作用域
javascript
何时梦醒27 分钟前
React + TypeScript + Vite 实战:从零构建 Color Picker 应用
前端·javascript·架构
Highcharts.js31 分钟前
基于Highcharts开发的OHLC 股票K线图完全指南
javascript·信息可视化·echarts·数据可视化·highcharts·ohlc
默_笙34 分钟前
😋 我让 DeepSeek-R1 在浏览器本地跑了起来,后端同事说"你认真的?"
前端·javascript
JasonMa1532 小时前
从零搭建一个微信小程序活动管理平台(一):架构设计与技术选型
javascript·微信小程序·node.js
古韵3 小时前
你的 uni-app 分页,一个 hook 搞定竞态和加载
javascript·vue.js·uni-app
成都渲染101云渲染66665 小时前
Blender渲染时,纯CPU渲染的设置教程
前端·javascript·blender
多加点辣也没关系5 小时前
JavaScript|第30章:事件机制
开发语言·javascript
YHHLAI6 小时前
Vue 3 流式输出实战:从零掌握 LLM Streaming 与 SSE 协议
前端·javascript·vue.js
不简说6 小时前
JS 代码技巧 vol.10 — 20 个 V8 引擎原理,解释"为什么这样写快"
前端·javascript·面试