我已经看到了这个问题的一些细节记录,但没有明确的解决方案。我正在使用 jQuery 的 $.ajax() 函数进行异步 ajax 调用。我在 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 中,它是“完成此操作所需的数据尚不可用”。即使在 IE 中引用 xhr
的 responseText
值也会引发错误,并且用户会收到错误对话框。
我在几个地方读到,我应该等到xhr.readyState == 4
,直到我引用xhr.responseText
,但是如果我放置 >if (xhr.readyState == 4) {
阻止我的错误函数中的代码,它永远不会在 ajax 超时情况下运行。当我检查 readyState
属性时,它的值为 1
,我认为这是“正在加载”。
这对于 ajax 超时来说正常吗?就绪状态会是 4 吗?如果没有,我怎样才能引用 xhr.responseText 而不会导致 IE 崩溃?
谢谢。
最佳答案
我了解到您需要更改代码来检查 typeof(xhr.responseText) != '未知') 我尚未确认它是否有效,因为很难重现该问题。
关于ajax - jQuery AJAX 超时后 IE7 中出现 "The data necessary to complete this operation is not yet available"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784940/