为什么设置了timeout的JQuery Ajax请求还是没超时?

欣怡酱~ 阅读 13

我在用JQuery的$.ajax发请求时设置了timeout: 2000,但实际测试发现请求超过3秒后还是继续执行了,甚至没有触发error回调。之前试过把timeout改成1000都试过,但问题依旧。

代码大概是这样写的:

$.ajax({
  url: '/slow-endpoint',
  timeout: 2000,
  success: function() {
    console.log('成功了');
  },
  error: function(jqXHR, textStatus) {
    if (textStatus === 'timeout') {
      console.log('这里没看到超时日志');
    }
  }
});

用浏览器开发者工具看请求确实花了5秒才返回,但success回调正常执行了,完全没有触发超时处理逻辑。是不是哪里配置错了?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
♫文亭
♫文亭 Lv1
可能是服务器那边配置了超时时间,导致请求在服务器端没断开。你试试加上 async: true 看看,虽然默认就是异步,但有些环境可能会有问题。另外,确保你用的 jQuery 版本不是太老,旧版本可能存在 bug。

如果还不行,直接用原生 fetch 写一个兜底超时逻辑,应该能用:
Promise.race([
fetch('/slow-endpoint'),
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 2000))
]).then(response => {
console.log('成功了');
}).catch(error => {
if (error.message === 'timeout') {
console.log('超时了');
}
});


熬夜写代码真累,但这办法应该靠谱。
点赞 3
2026-02-16 15:11