如何在x时间后没有响应w / abort()时取消ajax请求或第三方js请求

时间:2014-02-23 04:01:30

标签: javascript jquery ajax jquery-deferred

好奇你的解决方案是什么,优雅地说,处理块js调用/ ajax调用需要花费太长时间才能与第三方网站联系以获取数据/信息。

最近,我一直在争论一些脚本/ ajax请求,其中服务器已关闭或没有响应,并且字面上阻止了我的页面。他们被认为是异步的。

所以,我想在x时间之后中止通话。

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){}
});

然后使用:request.abort()如果花费太长时间。

但我想我可以在这里使用延迟/承诺,具有超时能力并且如果我的承诺在1000毫秒内没有回来,则会中止呼叫。

你的想法?

我没有提到ajax请求的超时attr。我不想在一个setTimeout中包装abort(),但是我需要jQuery ajax api w / timeout。我应该看到这个。谢谢大家。

3 个答案:

答案 0 :(得分:2)

检查超时选项:http://api.jquery.com/jQuery.ajax/

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    timeout: 2000,
    success: function(result){},
    error: function(xhr, status, message) {
        if(status == "timeout") {
            alert("Request time out");
       }
   }
});

答案 1 :(得分:1)

一种方法是使用setTimeout

var abort_req = setTimeout(function () {
    request.abort();
}, 3000);
 //^ time in ms 

答案 2 :(得分:1)

jQuery $.ajax timeout setting可能重复。 JQuery AJAX有一个可选的超时选项,可以通过毫秒传递。通过将回调函数传递给错误选项,您可以在AJAX请求超时时处理逻辑,如下所示:

error: function(x, t, m){
    //process error here
}