6

我正在使用 jQuery 1.4.2 并尝试执行一个简单的 AJAX 请求。目标 URL 返回一个 JSON 字符串(我使用 jslint 对其进行了验证)。该请求适用于 Firefox 和 Chrome,但不想在 IE8 中运行,我无法确定原因。这是电话:

jQuery.ajax({
url: 'http://' + domain + '/' + 'helper/echo/',
dataType: 'json',
success: function(data) {
 alert(data);
},
beforeSend: function(request, settings) {
 alert('Beginning ' + settings.dataType + ' request: ' + settings.url);
},
complete: function(request, status) {
 alert('Request complete: ' + status);
},
error: function(request, status, error) {
 alert(error);
}
});

IE 将执行 beforeSend 回调和错误回调。错误回调警告消息:

Error: This method cannot be called until the open method has been called.

我的响应标头返回Content-Type: text/javascript; charset=UTF-8.

IE是怎么回事?我在 localhost 上运行服务器,从http://localhost:8080/psxhttp://localhost:8080/helper发出请求。也许 IE 阻止了这个请求?我尝试安装 Fiddler 来分析请求流量,但它无法在我的机器上运行,因为它被锁定了。Firebug 让我,但那里的一切似乎都很好。

谢谢您的帮助!!!

4

1 回答 1

14

好吧,这里是修复!该请求正在使用window.XMLHttpRequest(),由于某种原因在 IE8 中无法正常工作。jQuery 并没有window.ActiveXObject("Microsoft.XMLHTTP")像它应该的那样失败。

在您的 AJAX 调用之前将其添加到您的脚本中(仅在 IE8 中验证,而不在其他 IE 中验证):

jQuery.ajaxSetup({
            xhr: function() {
                    //return new window.XMLHttpRequest();
                    try{
                        if(window.ActiveXObject)
                            return new window.ActiveXObject("Microsoft.XMLHTTP");
                    } catch(e) { }

                    return new window.XMLHttpRequest();
                }
        });

这是我找到解决方案的方法:

  1. 更新到 jQuery 1.4.4,以防问题是已修复的错误。
  2. 逐步通过 Firebug 调试器和 DevTools 调试器,直到结果似乎完全不同。
  3. 在第 5899 行,ajax() 函数使用 xhr() 函数创建 XmlHttpRequest 对象。在 Firefox 中,它返回了良好的数据。在 IE 中,这将返回所有字段Error: This method cannot be called until the open method has been called.
  4. 我在第 5749 行分析了这个函数,return new window.XMLHttpRequest();
  5. 我用谷歌搜索并遇到了这个有同样问题的页面,并提出了适合我的解决方案。
  6. 官方 jQuery 票
于 2010-12-30T15:47:34.817 回答