我希望对象调用都引用ActiveXObject。 但是为什么我们在IE中传递两个不同的参数。 1. Msxml2.XMLHTTP和 2. Microsoft.XMLHTTP
他们俩都一样吗?或者它们是否依赖于浏览器(IE7和IE8)?
我用过两者。我没有得到任何例外。两者对我来说都是一样的。我正在使用IE 8。
答案 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) {}
};
}