信息发布→ 登录 注册 退出

javascript怎样进行网络请求_fetch和axios有何区别

发布时间:2025-12-25

点击量:
fetch是浏览器原生轻量API,需手动处理Cookie、状态码、JSON解析等;axios是功能完备的第三方库,内置拦截器、超时、取消请求、自动序列化等特性,开发效率更高。

JavaScript 中发起网络请求,最常用的是 fetch(原生 API)和 axios(第三方库),它们都能发 HTTP 请求,但设计目标、使用方式和能力有明显差异。

fetch 是浏览器原生支持的轻量级 API

fetch 是现代浏览器内置的标准 API,基于 Promise,语法简洁,无需额外引入库。

  • 默认不带 Cookie,需显式设置 credentials: 'include' 才能携带认证信息
  • 400/500 状态码不会自动 reject,需手动检查 response.okresponse.status
  • 不支持请求/响应拦截、超时控制、取消请求(需配合 AbortController)
  • 上传文件时需手动构造 FormData,且对 JSON 自动解析需调用 response.json()

axios 是功能更完整的 HTTP 客户端库

axios 是基于 Promise 的通用 HTTP 库,支持浏览器和 Node.js,封装更友好,开箱即用的功能更多。

  • 默认携带 Cookie(取决于环境配置),也支持自定义 withCredentials
  • HTTP 错误状态(如 404、500)会自动触发 catch,不用手动判断状态码
  • 内置请求/响应拦截器,方便统一加 token、处理错误、日志等
  • 原生支持超时(timeout: 5000)、取消请求(CancelTokenAbortController)、自动序列化/反序列化 JSON
  • 上传进度监听、并发请求(axios.all)、自动转换请求数据格式(如对象自动转为 JSON)

实际使用时怎么选

如果项目简单、兼容性要求高(如需支持旧版 Safari)、或想减少依赖,用 fetch 更轻量;如果需要统一管理请求逻辑、频繁处理鉴权/错误/加载状态,axios 能显著提升开发效率和可维护性。

注意:fetch 在低版本 iOS Safari 中存在兼容问题,axios 在 Node.js 环境需搭配 axios/adapters/http 使用。

一个对比示例:发送 POST 请求

fetch(需手动处理):

fetch('/api/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ username: 'a', password: 'b' }),
  credentials: 'include'
})
.then(r => r.json())
.then(data => console.log(data))
.catch(err => console.error(err));

axios(更简洁):

axios.post('/api/login', { username: 'a', password: 'b' }, {
  withCredentials: true
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
标签:# javascript  # word  # java  # js  # node.js  # json  # node  # cookie  # 浏览器  # app  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!