IE7 + 8的AJAX readystatechange监听器

时间:2013-04-06 09:10:16

标签: javascript jquery ajax internet-explorer-8 internet-explorer-7

(function (send) {

     XMLHttpRequest.prototype.send = function () {

         this.addEventListener('readystatechange', function() {

             console.log('readyState changed');

         }, false);

         send.apply(this, arguments);
     };

})(XMLHttpRequest.prototype.send);

这有效,但它似乎正在影响其他框架(如jQuery)。当我使用上面的代码时,我的jQuery ajax调用没有完成(IE7 + IE8)。

有没有办法给这个事件一个新的别名,这样就不会引起任何冲突(我只是假设这是问题所在)?

我不能使用this.onreadystatechange,因为jQuery会覆盖它(见小提琴)。

当我绑定事件监听器时,代码似乎无声地失败,因此我无法使用控制台进行调试。

Fiddle

Compare in ie8 vs ie9 mode and notice that the console is empty in ie8

我需要这个的原因是我想要另一个框架(GWT)的全局ajax处理程序。我现在只使用jQuery进行测试。

编辑:看起来只有ie9支持addEventListener。但是,{7}中的XHR对象似乎不存在attachEvent

1 个答案:

答案 0 :(得分:1)

我们遇到类似的问题,jquery在IE8上失败了。我假设你正在提出跨域请求。 Jquery通过XMLHttpRequest执行ajax,但是IE8已经用XDomainRequest替换了XMLHttpRequest对象,并且jquery人不支持它。所以对于IE8,你将不得不修改代码以使用带有jquery的XDomainRequest。

查看链接

Using jquery ajax for IE8