javascript ajax如何使用_fetch和axios哪个更强大【教程】
技术百科
夜晨
发布时间:2026-01-28
浏览: 次 fetch是原生API,轻量无依赖但需手动处理cookie、拦截、JSON序列化等;axios是第三方库,开箱即用支持默认带cookie、请求响应拦截、自动JSON解析、更好兼容性及超时取消等高级功能。
fetch 和 axios 都能发请求,但它们定位不同:fetch 是浏览器原生 API,轻量、无依赖;axios 是第三方库,封装更全、默认行为更贴近实际开发需求。选哪个不看“谁更强大”,而要看你是否愿意自己补足 fetch 缺失的常用能力。
fetch 默认不带 cookie,axios 默认带(但需配置)
这是最常踩的坑。fetch 发送请求时,默认 credentials 是 'omit',即不自动携带 Cookie,即使后端已设 withCredentials: true 也不行:
fetch('/api/user', {
credentials: 'include' // 必须显式写这一行
})
axios 默认行为是不发送 Cookie,但只需一次全局配置就能改:
axios.defaults.withCredentials = true
常见错误现象:401 Unauthorized 或登录态丢失 —— 很可能就是忘了设 credentials 或 withCredentials。
立即学习“Java

fetch 没有内置请求/响应拦截,axios 支持中间件式拦截
比如统一加 token、记录耗时、错误分类处理,axios 可直接用:
axios.interceptors.request.use(config => {
config.headers.Authorization = `Bearer ${token}`;
return config;
});
fetch 要实现类似逻辑,得手动封装函数,每次调用都得包一层,且无法在发起前或响应后“劫持”原始 request/response 对象:
- 没有标准方式在 fetch 发出前修改 headers 或 body
- 响应体必须手动
.json()、.text(),不能像 axios 那样自动根据Content-Type推断 - 网络失败(如断网)和 HTTP 错误(如 404、500)都走
catch,需手动检查response.ok
axios 自动做 JSON 序列化和解析,fetch 全靠手写
用 fetch 发 POST JSON 请求,必须手动设置 header 并调用 JSON.stringify:
fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
})
axios 会自动处理:
axios.post('/api/login', { username, password }) // 自动序列化 + 设 header
反过来,响应解析也更省心:axios 默认把 JSON 响应转成 JS 对象;fetch 必须显式调用 response.json(),且这个操作本身会抛错(比如返回空体或非 JSON 内容)。
兼容性与体积差异直接影响选型
fetch 在 IE 完全不支持,连 polyfill(如 whatwg-fetch)也无法覆盖所有 Edge 旧版本;axios 支持 IE11(需 Promise polyfill)。
体积方面:axios min+gzip 后约 5KB,fetch 是浏览器自带,零体积 —— 如果项目已用 webpack/vite 且对包大小敏感,又只支持现代浏览器,fetch 更干净;如果要快速上线、兼容老环境、团队协作频繁,axios 的开箱即用省下的调试时间远超那几 KB。
真正复杂的地方不在语法,而在边界:超时控制、取消请求、上传进度、自动重试 —— axios 内置 AbortController 兼容方案和 cancelToken(v0.22+ 已弃用,转向 AbortSignal),fetch 虽原生支持 AbortSignal,但超时仍需手动 setTimeout + AbortController.abort() 组合实现。
# 浏览器
# app
# word
# edge
# js
# json
# javascript
# java
# 封装
# 中间件
# cookie
# ajax
# vite
# webpack
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10怎么限制单程序CPU占用上限_Win10
- MAC如何安装Git版本控制工具_MAC开发环境配
- Python 中将 ISO 8601 时间戳转换为
- 静态属性修改会影响所有实例吗_php作用域操作符下
- Win10如何卸载微软拼音输入法 Win10只保留
- Windows电脑键盘突然失灵怎么办?(驱动与硬件
- Python对象生命周期管理_创建销毁解析【教程】
- Win10电脑怎么设置休眠快捷键_Windows1
- Win11怎么把图标拖到任务栏_Win11固定应用
- Python对象生命周期管理_创建销毁说明【指导】
- c# 在高并发下使用反射发射(Reflection
- 如何优化Golang内存分配与GC调度_Golan
- Win11怎么恢复旧版开始菜单_通过软件还原Win
- Python集合操作技巧_高效去重解析【教程】
- Win11资源管理器卡顿怎么办 Win11文件资源
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么设置麦克风权限_允许应用访问Win1
- Django密码修改后会话失效的解决方案
- php错误怎么开启_display_errors与
- 如何使用Golang reflect检查方法数量_
- Python网络日志追踪_请求定位解析【教程】
- Python大文件处理策略_内存优化说明【指导】
- Mac如何查看电池健康百分比_Mac系统信息电源检
- 如何在JavaScript中动态拼接PHP的bas
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- 用Python构建微服务架构实践_FastAPI与
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- php打包exe后无法读取环境变量_变量配置方法【
- Python与Docker容器化部署实战_镜像构建
- Flask 表单数据通过 SMTP 发送邮件的完整
- php订单日志怎么按金额排序_php按订单金额排序
- Python大型项目拆分策略_模块化解析【教程】
- php中常量能用::访问吗_类常量与作用域操作符使
- Win11怎么关闭搜索历史_Win11清除任务栏搜
- Windows10如何更改盘符名称_Win10重命
- 短链接还原php提示内存不足_调整PHP内存限制设
- Windows如何设置登录时的欢迎屏幕背景?(锁屏
- Windows10如何更改系统字体大小_Win10
- Windows10系统怎么查看CPU核心数_Win
- Golang如何遍历目录文件_Golang fil
- 如何将竖排文本文件转换为横排字符串
- Win10系统更新错误0x80240034怎么办
- 如何在Golang中实现微服务负载均衡_Golan
- 如何使用Golang包导出规则_控制函数和变量可见
- 如何在同包不同文件中正确引用 Go 结构体
- Win11怎么修复系统文件_使用sfc命令修复Wi
- Win11无法拖拽文件到任务栏怎么办_Win11开
- Drupal 中渲染节点时出现 HTML 标签嵌套
- php内存溢出怎么排查_php内存限制调试与优化方
- PHP主流架构如何处理会话管理_Session与C

QQ客服