簡體   English   中英

jQuery ajax失敗的請求未觸發完成或錯誤處理程序

[英]jquery ajax failed request not triggering complete or error handler

我正在像這樣進行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的控制台中收到“無法加載資源”。

問題在於,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
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM