javascript中用axios实现ajax全局错误拦截和token失效重定向,核心是通过响应拦截器统一处理401等错误、用标志位+promise队列防重复跳转、请求拦截器自动携带token、封装request函数增强可维护性。

在 JavaScript 中做 Ajax 全局错误拦截和 Token 失效重定向,核心是统一管理请求发起与响应处理逻辑,避免每个接口单独写重复的错误判断。现代项目通常用 axios 实现,下面以 axios 为例,给出简洁、可落地的方案。
一、用 axios.interceptors 做全局响应拦截
所有响应都经过这里,适合集中判断状态码、Token 过期等通用错误:
- 响应拦截器中检查
response.status和自定义错误码(如后端返回{ code: 401, msg: "Token expired" }) - 对 401 或自定义 token 失效码,清除本地 token(如 localStorage.removeItem('token')),跳转登录页
- 注意:要避免重复跳转(比如多个并发请求同时 401),可用一个标志位控制只跳一次
二、用 Promise 队列解决“多次 401 触发多次跳转”问题
当多个请求几乎同时返回 401,直接跳转会导致页面刷新多次或路由异常。推荐做法是:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 声明一个
let isRedirecting = false标志 - 首次遇到 401 时设为 true,并启动跳转逻辑;后续 401 暂存为 Promise,等跳转完成后统一 reject 给调用方
- 也可用
Promise.allSettled+ 请求缓存方式,但简单项目用标志位+队列更轻量
三、请求拦截器里自动携带 Token
确保每次请求都带上有效凭证,减少手动遗漏:
- 从 localStorage / sessionStorage / pinia / redux 中读取 token
- 设置到请求头:
config.headers.Authorization = `Bearer ${token}` - 若 token 为空,也可在此直接跳转登录,避免发无效请求
四、封装 request 函数,暴露可取消/可配置的调用方式
业务层不直接调用 axios,而是用封装后的函数,便于后续加 loading、日志、重试等能力:
- 返回 Promise,错误统一抛出标准 Error 对象(含 code、message、response)
- 支持传入
ignoreAuth选项,用于登录、刷新 token 等免鉴权接口 - 可选:集成 abortController,支持页面卸载时自动取消未完成请求
不复杂但容易忽略的是拦截时机和状态同步——Token 清除、路由跳转、UI 提示需保持一致,否则会出现“已登出但侧边栏还显示用户名”这类体验问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










