2011-01-27 87 views
0

我正在做一个Ajax调用是这样的:jQuery的AJAX请求失败不触发完整或错误处理

var requestData = function() { 
    $.ajax({ 
     dataType: 'jsonp', 
     jsonp: 'js', 
     url: "http://someServer", 
     success: function (data) { 
      // do stuff with data 
     }, 
     complete : function(data) { 
      // try again in 5 seconds 
      setTimeout(requestData, 5000); 
     } 
    }); 
}; 

一切都很好,和它的作品,除了:服务器是有点片状,并有时它不能返回回应。这很好,但是当这种情况发生时,完整的处理程序从不会触发。我也尝试使用错误处理程序。有什么我可以做的吗?我曾经想过使用setInterval,但我真的宁愿它在这一个之后做下一个,而不是在他们可能堆积的时间。

更新:当服务器失败时,我得到在Chrome的控制台中“无法加载资源”。

回答

0

问题是JSONP的工作原理是将一个script标记插入到DOM中,而不是通过XMLHTTPRequest。 script标签没有onerror属性,因此您无法通过常规方法测试成功。唯一的办法是通过超时。

像这样的东西可能会奏效:

var requestComplete = {}; 
var requestData = function() { 
    var now = (new Date()).getTime(); 
    requestComplete[now] = false; 
    $.ajax({ 
     dataType: 'jsonp', 
     jsonp: 'js', 
     url: "http://someServer", 
     success: function (data) { 
      requestComplete[now] = true; 
      // do stuff with data 
     } 
    }); 
    setTimeout(function() { 
     if (!requestComplete[now]) { 
      setTimeout(requestData, 5000); // try again in 5 seconds 
     } 
    }, 5000); // give the JSONP request 5 seconds to work 
}; 
+0

确定。 setInterval工作正常,所以我想我会忍受。谢谢。 – sprugman 2011-01-27 22:28:31