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; ?>
】
相关推荐
- php怎么操作Redis_Redis扩展连接与基本
- Win11关机界面怎么改_Win11自定义关机画面
- Win11时间不对怎么同步_Win11自动校准互联
- Win11怎么开启专注模式_Windows11时钟
- windows如何备份注册表_windows导出和
- Python如何创建带属性的XML节点
- LINUX如何查看文件类型_Linux中file命
- windows系统如何安装cab更新补丁_wind
- Python与OpenAI接口集成实战_生成式AI
- Win11怎么关闭应用权限_Windows11相机
- 如何使用Golang管理模块版本_Golanggo
- Python与Docker容器化部署实战_镜像构建
- Win11怎么关闭搜索历史_Win11清除设备上的
- c# 在高并发下使用反射发射(Reflection
- Win11怎么设置环境变量_Win11配置Path
- Win11麦克风没声音怎么设置_Win11麦克风权
- 如何使用Golang实现微服务状态监控_Golan
- Win11怎么设置ipv4地址_Windows 1
- Win11如何设置电源计划_Win11电源计划优化
- Win11怎么关闭小组件_Win11禁用任务栏天气
- php转mp4怎么保留字幕_php处理带字幕视频转
- Windows如何使用BitLocker To G
- php订单日志怎么导出excel_php导出订单日
- Windows10如何更改鼠标图标_Win10鼠标
- Windows10蓝屏SYSTEM_SERVICE
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- Win11 C盘满了怎么清理 Win11磁盘清理和
- Windows10如何更改系统字体大小_Win10
- C++如何使用std::async进行异步编程?(
- Win11怎么看电池循环次数_Win11笔记本电池
- php打包exe后无法写入文件_权限问题解决方法【
- c++中的CRTP是什么 c++奇异递归模板模式【
- PHP 中如何在函数内持久修改引用变量所指向的目标
- Drupal 中 HTML 链接被重复转义导致渲染
- 如何使用Golang进行HTTP服务性能测试_测量
- c++中如何计算坐标系中两点间距离_c++勾股定理
- 如何在Golang中使用内置函数_Golangle
- Mac如何调整Dock栏大小和位置_Mac程序坞个
- Windows10如何更改计算机工作组_Win10
- 如何在 Django 中安全修改用户密码而不使会话
- Win11笔记本怎么看电池健康度_Win11电池报
- Python配置文件操作教程_JSONINIYAM
- Windows10系统怎么查看显卡型号_Win10
- Win11怎么更改盘符_Win11磁盘管理修改驱动
- Windows7怎么找回经典开始菜单_Window
- PHP主流架构怎么部署到Docker_容器化流程【
- Avalonia如何实现跨窗口通信 Avaloni
- 如何在Golang中捕获JSON序列化错误_Gol
- Win11怎么关闭系统推荐内容_Windows11
- Win11怎么设置虚拟桌面 Win11新建多桌面切

QQ客服