Сообщение «Данные, необходимые для выполнения этой операции, пока недоступны» в IE7 после истечения времени ожидания jQuery AJAX - PullRequest
2 голосов
/ 24 января 2011

Я видел частички этой проблемы, задокументированные вокруг, но нет четкого решения. Я делаю асинхронный вызов ajax, используя функцию $ .ajax () jQuery. У меня есть код в методе ошибки функции ajax для обработки тайм-аутов ajax (см. Код ниже), и все отлично работает в Firefox. Но в IE я получаю следующее сообщение: «Данные, необходимые для выполнения этой операции, еще не доступны».

Прежде чем идти дальше, вот мой код:

error: function(xhr, status) {

    var res = xhr.responseText;
    var err = null;

    if (res && res.charAt(0) == '{')
        err = $.secureEvalJSON(res);
    if (!err) {
        if (status == "timeout") {
            err = new CallbackException("The request has timed out.");
        }
        else if (xhr.status != 200) {
            err = new CallbackException(xhr.status + " " + xhr.statusText);
        }
        else {
            err = new CallbackException("Unknown Error Response");
        }

        err.detail = res;
    }
    else
        err = new CallbackException(err); // force error to common format

    if (errorHandler)
        errorHandler(err, _I, xhr);
    }
}

Итак, вы видите, первое, что я делаю в ситуации ошибки, это проверка xhr.responseText. В Firefox эта строка пуста (""), но в IE это «Данные, необходимые для выполнения этой операции, пока недоступны». Даже ссылка на responseText значение xhr в IE вызывает ошибку, и пользователь получает диалоговое окно с ошибкой.

Я прочитал в нескольких местах, что мне следует подождать до xhr.readyState == 4, пока я не упомяну xhr.responseText, но если я добавлю блок if (xhr.readyState == 4) { вокруг кода в моей функции ошибки, он никогда не будет работать в течение тайм-аута ajax дело. Когда я проверяю свойство readyState, его значение равно 1, которое я считаю "загрузка".

Это нормально для тайм-аута ajax? Будет ли когда-нибудь готовое состояние 4? Если нет, то как я могу ссылаться на xhr.responseText без взрыва IE?

Спасибо.

1 Ответ

3 голосов
/ 08 февраля 2011

Я прочитал, что вам нужно изменить код, чтобы проверить, что typeof (xhr.responseText)! = 'Unknown') Я еще не подтвердил, что это работает, потому что трудно воспроизвести проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...