新闻中心
J*aScript网络请求_Axios与Fetch API高级用法
Axios和Fetch是前端网络请求核心工具,Axios支持拦截器、自动JSON转换和请求取消,适合复杂项目;Fetch为浏览器原生API,轻量且支持流处理,适用于简单场景。通过自定义实例、封装函数、统一错误处理及使用AbortController取消请求,可提升代码可维护性和健壮性。两者可根据项目需求选择或共存,关键在于规范统一。

在现代前端开发中,网络请求是与后端交互的核心手段。Axios 和 Fetch API 是目前最常用的两种方式。它们各有优势,掌握其高级用法能显著提升代码的可维护性和健壮性。
1. Axios 高级配置与拦截器
Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js,提供了丰富的配置选项。
自定义实例:可以创建独立的 Axios 实例,设置基础 URL、超时时间、请求头等。
const apiClient = axios.create({baseURL: 'https://api.example.com',
timeout: 5000,
headers: { 'Content-Type': 'application/json' }
});
这样所有通过 apiClient 发出的请求都会自动携带这些配置。
请求与响应拦截器:可用于统一处理认证、日志、错误提示等。
// 请求拦截器apiClient.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// 响应拦截器
apiClient.interceptors.response.use(
response => response,
error => {
if (error.response?.status === 401) {
// 处理未授权
localStorage.removeItem('token');
window.location.href = '/login';
}
return Promise.reject(error);
} );
拦截器极大简化了全局逻辑处理,避免重复代码。
2. Fetch API 高级用法与封装
Fetch 是浏览器原生提供的 API,无需引入额外库,但默认不发送 Cookie,且不会 reject HTTP 错误状态码。
手动处理响应状态:需检查 ok 属性或 status 来判断请求是否成功。
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
credentials: 'include' // 携带 Cookie
})
.then(res => {
if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
return res.json();
})
.then(data => console.log(data))
.catch(err => console.error('Fetch error:', err));
封装 Fetch 提高复用性:可以封装通用逻辑,如自动解析 JSON、统一错误处理。
Kreado AI
Kreado AI是一个多语言AI视频创作平台,只需输入文本或关键词,即可创作真实/虚拟人物的多语言口播视频。 为创作者提供AI赋能
182
查看详情
async function request(url, opt
ions = {}) {const config = {
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
};
const res = await fetch(url, config);
if (!res.ok) {
const errorData = await res.json().catch(() => ({}));
throw new Error(errorData.message || res.statusText);
}
return res.json();
}
使用封装后的函数更简洁:
request('/api/profile', { method: 'GET' }).then(data => console.log(data))
.catch(err => alert(err.message));
3. 错误处理与取消请求
无论是 Axios 还是 Fetch,合理的错误处理和请求取消机制对用户体验至关重要。
Axios 支持 CancelToken(旧)或 AbortController(新)取消请求:
const controller = new AbortController();apiClient.get('/search', {
params: { q: 'query' },
signal: controller.signal
})
.then(res => console.log(res.data))
.catch(thrown => {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
}
});
// 取消请求
controller.abort();
Fetch 原生支持 AbortController:适合防止重复请求或页面切换时清理。
const controller = new AbortController();fetch('/data', { signal: controller.signal })
.catch(e => {
if (e.name === 'AbortError') {
console.log('Fetch aborted');
}
});
// 手动取消
controller.abort();
4. 对比与选型建议
Axios 和 Fetch 各有适用场景。
- Axios 自动转换 JSON,支持拦截器,兼容性好,适合复杂项目。
- Fetch 更轻量,原生支持流式处理,适合简单场景或追求零依赖的项目。
- 若需上传进度监听,Axios 提供
onUploadProgress回调,Fetch 目前无法直接实现。 - Fetch 在处理大文件或流数据时更具潜力,可通过
response.body获取 ReadableStream。
实际开发中,可根据团队习惯、项目规模和功能需求选择。也可以共存,关键在于统一规范。
基本上就这些,掌握这些高级技巧能让网络请求更可控、更安全、更易维护。
以上就是J*aScript网络请求_Axios与Fetch API高级用法的详细内容,更多请关注其它相关文章!
# 自定义
# 南京seo排名企业
# 东丽区营销推广网点地址
# 营销号推广主播
# 百度网络营销推广案例
# 南康seo优化加盟
# 抖音seo热门视频
# 山西优化暂住证办理网站
# 临沂网站建设信息
# 咏春电影网站建设
# 资阳网站推广方案
# 可根据
# 多语言
# 如何处理
# 关键在于
# 各有
# javascript
# 是一个
# 如何实现
# 拦截器
# 关键词
# axios
# app
# 浏览器
# cookie
# node
# json
# node.js
# 前端
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
VS Code远程开发时如何处理文件权限问题
CSS Grid如何控制元素对齐_align-items与justify-items组合使用
俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口
如何在网页中实现特定地点的随机图片展示
淘宝支付提示失败如何解决 淘宝支付流程优化方法
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
qq音乐在线播放入口_qq音乐电脑版登录链接
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
CSS实现侧边栏导航项全宽圆角悬停背景效果
解决深度学习模型训练初期异常高损失与完美验证准确率问题
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
iCloud登录入口网页版 苹果iCloud官网登录
TikTok网页版直接登录 TikTok网页端官方平台入口
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
HTML空白字符处理机制:渲染、DOM与编码实践
双系统安装时,如何设置默认启动系统? msconfig命令了解一下!
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
J*a 递归快速排序中静态变量的状态管理与陷阱
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
React中useState与局部变量:理解组件状态管理与渲染机制
精准捕获:如何在页面中监听除特定元素外的所有点击事件
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
利用Bokeh CustomJS动态控制DataTable列可见性
Python大型XML文件高效流式解析教程
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
J*aScript中如何高效提取对象指定属性
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
极兔快递快件信息查询系统 极兔快递官网运单号追踪
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
优化Log4j2控制台输出性能:解决异步日志瓶颈
J*aScript数据结构转换:将对象数组按类别分组
Mac怎么查看崩溃日志_Mac控制台错误报告分析
PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比
J*a应用集成GitHub CLI与API认证指南
菜鸟取件码是什么怎么查 最全查询渠道汇总
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版


2025-11-22
浏览次数:次
返回列表