2011-01-27 49 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