You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios HTTP请求始终判定为成功,无法捕获503错误状态的问题

解决Axios请求返回503却进入成功回调的问题

看起来你遇到了个有点反直觉的问题——明明接口返回了503状态码,Axios却跑到then()里而不是catch()。别担心,这种情况大多和Axios的错误判断规则有关,咱们一步步排查解决:

先搞懂Axios的默认错误判定逻辑

Axios默认只会把状态码不在200-299范围内的请求判定为错误,触发catch()回调。但如果你的axiosConfig里修改了validateStatus配置项,这个规则就会被打破。比如要是有人把它改成了这样:

const axiosConfig = {
  // 其他配置...
  validateStatus: (status) => true // 强制所有状态码都视为成功
};

那不管服务器返回503、404还是500,请求都会乖乖进入then()。

解决方案1:检查并修正validateStatus配置

先确认你的axiosConfig里有没有自定义validateStatus。如果有,把它改回默认规则就行:

const axiosConfig = {
  // 其他配置...
  validateStatus: (status) => status >= 200 && status < 300
};

要是不需要自定义这个规则,直接删掉该配置项,Axios会自动用默认值。

如果配置没问题,手动在then()里校验状态码

有时候可能因为代理、CORS设置或者服务器响应的特殊情况,Axios没能正确识别错误状态码。这时候可以在成功回调里主动检查状态,把异常抛给catch()处理:

getData() { 
  axios.get(`/api/article/getObserved.php`, axiosConfig) 
    .then(response => { 
      // 先判断状态码是否异常
      if (response.status >= 400) {
        throw new Error(`请求失败,状态码:${response.status}`);
      }
      console.log('success'); 
      console.log(response); 
    }) 
    .catch(err => { 
      console.log('error'); 
      // 这里可以正常获取状态码了
      console.log(err.response?.status || err.message); 
    }); 
}

这样哪怕Axios误判了成功,咱们也能手动把异常流转到catch()里。

额外提醒:确认实际响应状态

打开浏览器的Network面板,找到这个请求,确认服务器真的返回了503状态码。有时候可能存在缓存、代理重定向的情况,实际到达浏览器的状态码和服务器设置的不一样——比如有些代理会把503转换成200,这时候Axios自然会进入then()。

内容的提问来源于stack exchange,提问作者BT101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:15