JQuery AJAX не удалось запрос не завершен или обработчик ошибок - PullRequest
0 голосов
/ 28 января 2011

Я делаю вызов 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.

1 Ответ

0 голосов
/ 28 января 2011

Проблема в том, что 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
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...