我已经看到了这个问题的点点滴滴,但没有明确的解决方案。我正在使用jQuery的$ .ajax()函数进行异步ajax调用。我有ajax函数的错误方法中的代码来处理ajax超时(请参阅下面的代码),并且在Firefox中一切正常。但在IE中,我收到以下消息:“完成此操作所需的数据尚不可用。”“完成此操作所需的数据尚不可用”在jQuery AJAX超时后IE7中发出的消息
我去任何前进一步,这里是我的代码:
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中引用responseText
值xhr
也会引发错误,并且用户会收到错误对话框。
我读过一对夫妇的地方,我应该等到xhr.readyState == 4
,直到我引用xhr.responseText
,但如果我在误差函数把一个if (xhr.readyState == 4) {
块周围的代码,它永远不会在Ajax超时的情况下运行。当我检查readyState
财产时,其价值是1
,我认为这是“加载”。
这是正常的ajax超时?准备好的状态会是4吗?如果没有,我怎么能没有IE吹起来引用xhr.responseText?
谢谢。
是的,这似乎工作。重要的细节:你检查的类型是*未知的*不是通常的*未定义*。 – brianmearns 2012-05-09 19:08:56