ajax - jQuery AJAX 超时后 IE7 中出现 "The data necessary to complete this operation is not yet available"消息

标签 ajax asynchronous internet-explorer-7 timeout

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

我在几个地方读到,我应该等到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/

相关文章:

javascript - Ajax,在 javascript 中处理 php 响应

javascript - getJSON完成后实例化一个对象

javascript - 使用 Ajax 动态更新 Django 表单字段选项以获取新的查询集

javascript - Ajax Jquery 将变量传递给 PHP 文件

php - PHP中的异步shell exec

IE 8 及以下版本的 CSS - div 背景图像大小

javascript - 优化异步调用(.then() 链接)

javascript - 从异步 JavaScript 方法获取结果,无需回调

css - DIV 宽度未扩展以适应子 DIV 的宽度 - IE7

css - ie7错误: Floats get pushed down