6

我希望两个对象调用都引用 ActiveXObject。但是为什么我们要传递两个不同的参数来在 IE 中工作。1. Msxml2.XMLHTTP 和 2. Microsoft.XMLHTTP

他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?

我两个都用过。我没有得到任何例外。两者对我来说都一样。我正在使用 IE 8。

4

2 回答 2

9

两者实际上都已经过时了。微软古老的 MSXML ActiveX 对象有多种版本(我相信最后一个版本是 5.0 版,并附带了某些版本的 Office。)这些版本在行为上有细微差别,并且错误修复通常不会在 AJAX 场景中发挥作用.

从 IE7 开始,Microsoft 支持其他现代浏览器采用的标准化“XmlHttpRequest”对象。请参阅http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx。您绝对应该使用它,因为 IE7 现在是事实上的最低公分母。大多数主要组织已宣布 IE6 已死,因此没有理由支持旧的 Microsoft 特定 ActiveX ProgID。

当然,现在几乎没有理由推出自己的 AJAX 调用,因为像 jQuery 和 ASP.NET Ajax 之类的库会为你做这件事,抽象出这些晦涩难懂的浏览器怪癖。我强烈建议学习其中一个库。

乔丹·里格

于 2010-10-22T03:17:17.487 回答
2

jquery(至少 1.4.2)在 $.ajax() 调用上有问题。它使内存泄漏很大(如喷泉)悲剧代码:

if ( window.ActiveXObject ) {
    jQuery.ajaxSettings.xhr = function() {
        if ( window.location.protocol !== "file:" ) {
            try {
                return new window.XMLHttpRequest();
            } catch(xhrError) {}
        }

        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(activeError) {}
    };
}

解析度:

if ( window.ActiveXObject ) {
    jQuery.ajaxSettings.xhr = function() {
        if ( window.location.protocol !== "file:" ) {
            if ( window.ActiveXObject ) {
                try {
                    return new window.ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
            try {
                return new window.XMLHttpRequest();
            } catch(xhrError) {}
        }

        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(activeError) {}
    };
}
于 2011-06-10T08:29:50.217 回答