0

0

javascript如何发送HTTP请求_使用fetch还是axios【教程】

夜晨

夜晨

发布时间:2026-01-28 11:50:43

|

577人浏览过

|

来源于php中文网

原创

日常开发优先用axios,简单脚本或现代浏览器轻量需求可用fetch;二者设计目标不同,不可互为替代。fetch默认不带cookie、无超时、4xx/5xx不自动reject,需手动检查response.ok;axios自动处理JSON、错误、超时等,但体积大且不可tree-shake。

javascript如何发送http请求_使用fetch还是axios【教程】

直接说结论:日常开发优先用 axios,简单脚本或现代浏览器环境轻量需求可用 fetch;但别把 fetch 当成 axios 的“精简替代”,它们设计目标不同,强行混用容易踩坑。

fetch 默认不带 cookie,且 4xx/5xx 不报错

fetchResponse.ok 是判断 HTTP 状态码是否在 200–299 的唯一可靠方式,then 里拿到的响应体不会因 404 或 500 自动 reject —— 这和 axios 默认抛异常的行为完全相反。

常见错误现象:fetch('/api/user').then(res => res.json()) 遇到 401 时仍会执行 res.json(),结果抛出解析空响应体的错误,掩盖了真实状态码问题。

实操建议:

立即学习Java免费学习笔记(深入)”;

  • 必须手动检查 response.okresponse.status
  • 跨域请求需显式传 { credentials: 'include' } 才带 cookie
  • 没有默认 timeout,超时要靠 AbortController 自己控制

axios 自动处理 JSON、错误、超时,但体积大、不可 tree-shake

axios 在请求发出前自动序列化 data(如对象转 JSON),响应时自动 JSON.parse,还内置了 timeoutvalidateStatustransformRequest 等实用配置。但它的整个包(约 14KB gzip)无法按需引入 —— 即便只用 get 方法,也会打包全部逻辑。

使用场景:

  • 需要统一拦截请求/响应(比如加 token、错误 toast)
  • 大量表单提交、文件上传(FormData 支持更稳)
  • 老项目兼容 IE11(fetch 需 polyfill,axios 原生支持)

注意:axiosresponse.data 是已解析的 JS 对象,而 fetchresponse.json() 是 Promise,这点常被忽略导致类型误判。

码上飞
码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

下载

不要在 fetch 中直接 await response.json() 而不检查 status

这是最常被复制粘贴却出问题的写法:

const res = await fetch('/api/data');
const data = await res.json(); // ❌ 404 时 res.json() 可能 resolve 一个空对象或抛错

正确做法是先确认状态再解析:

const res = await fetch('/api/data', { credentials: 'include' });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json(); // ✅

如果项目已用 axios,就别在同一个项目里混用 fetch 处理同类接口 —— 错误处理逻辑、取消机制、拦截时机都不一致,后期维护成本陡增。

复杂请求(上传进度、流式响应、自定义 header 兼容性)优先选 axios

fetchReadableStream 支持较好(适合大文件分块上传或 SSE),但对上传进度监听无原生 API;axios 提供 onUploadProgress 回调,且对 Content-Type 的自动推导更鲁棒(比如传 File 对象时自动设为 multipart/form-data 并生成 boundary)。

容易被忽略的地方:

  • fetch 发送 FormData 时不会自动设置 Content-Type header,浏览器会自动生成带 boundary 的值,但如果你手动设置了 headers: { 'Content-Type': 'multipart/form-data' },反而会破坏上传
  • axiosparams 是 URL 查询参数,data 是请求体,而 fetch 全靠手拼 URL 和 body 字段,稍不注意就发错位置

真正需要权衡的不是“哪个更好用”,而是“你的项目是否承担得起额外的 14KB 和运行时开销,以及团队是否愿意统一维护一套请求抽象”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6427

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

347

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

92

2025.08.19

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号