Я видел частички этой проблемы, задокументированные вокруг, но нет четкого решения. Я делаю асинхронный вызов 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?
Спасибо.