如何设置ajax超时(jQuery)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)
$.ajax({
    url: "test.html",
    error: function(){
        //do something
    },
    success: function(){
        //do something
    }
});

有时候success功能很好,有时候不行。

如何为这个ajax请求设置超时时间?例如,3秒钟,如果时间到了,然后显示错误。

问题是,ajax请求冻结块直到完成。如果服务器停机一段时间,它将永远不会结束。

提问于
用户回答回答于

请阅读$.ajax 文档,这是一个涵盖的主题。

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

通过访问该error: function(jqXHR, textStatus, errorThrown)选项的textStatus参数,你可以看到发生了什么类型的错误。选项有“超时”,“错误”,“中止”和“解析错误”。

用户回答回答于

用jQuery 1.8+承诺

Promise.resolve(
  $.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
  })
).then(function(){
  //do something
}).catch(function(e) {
  if(e.statusText == 'timeout')
  {     
    alert('Native Promise: Failed from timeout'); 
    //do something. Try again perhaps?
  }
});

jQuery 1.8+

$.ajax({
    url: '/getData',
    timeout:3000 //3 second timeout
}).done(function(){
    //do something
}).fail(function(jqXHR, textStatus){
    if(textStatus === 'timeout')
    {     
        alert('Failed from timeout'); 
        //do something. Try again perhaps?
    }
});​

jQuery <= 1.7.2

$.ajax({
    url: '/getData',
    error: function(jqXHR, textStatus){
        if(textStatus === 'timeout')
        {     
             alert('Failed from timeout');         
            //do something. Try again perhaps?
        }
    },
    success: function(){
        //do something
    },
    timeout:3000 //3 second timeout
});

注意textStatus参数(或者jqXHR.statusText)会让你知道错误是什么。如果你想知道失败是由超时引起的,这可能很有用。

错误(jqXHR,textStatus,errorThrown) 如果请求失败,将调用一个函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x中,XMLHttpRequest)对象,一个描述发生的错误类型的字符串以及一个可选的异常对象(如果发生的话)。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“未找到”或“内部服务器错误”。从jQuery 1.5开始,错误设置可以接受一组函数。每个函数都会依次调用。注意:此处理程序不针对跨域脚本和JSONP请求进行调用。

扫码关注云+社区