2011-01-24 36 views
2

我已经看到了这个问题的点点滴滴,但没有明确的解决方案。我正在使用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中引用responseTextxhr也会引发错误,并且用户会收到错误对话框。

我读过一对夫妇的地方,我应该等到xhr.readyState == 4,直到我引用xhr.responseText,但如果我在误差函数把一个if (xhr.readyState == 4) {块周围的代码,它永远不会在Ajax超时的情况下运行。当我检查readyState财产时,其价值是1,我认为这是“加载”。

这是正常的ajax超时?准备好的状态会是4吗?如果没有,我怎么能没有IE吹起来引用xhr.responseText?

谢谢。

回答

3

我已阅读,你需要改变你的代码检查 的typeof(xhr.responseText)!=“未知”) 我还没有证实,它的工作原理又因为它很难重现该问题。

+1

是的,这似乎工作。重要的细节:你检查的类型是*未知的*不是通常的*未定义*。 – brianmearns 2012-05-09 19:08:56

相关问题