Ajax调用:新ActiveXObject(“Msxml2.XMLHTTP”)和新ActiveXObject(“Microsoft.XMLHTTP”)之间有什么区别?

时间:2010-10-22 03:06:06

标签: ajax activexobject

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

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

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

2 个答案:

答案 0 :(得分:6)

两者实际上已经过时了。有各种版本的微软着名的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这样的库为你做这件事,抽象出这些晦涩难懂的浏览器怪癖。我强烈建议学习其中一个库。

Jordan Rieger

答案 1 :(得分:1)

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) {}
    };
}