我希望两个对象调用都引用 ActiveXObject。但是为什么我们要传递两个不同的参数来在 IE 中工作。1. Msxml2.XMLHTTP 和 2. Microsoft.XMLHTTP
他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?
我两个都用过。我没有得到任何例外。两者对我来说都一样。我正在使用 IE 8。
我希望两个对象调用都引用 ActiveXObject。但是为什么我们要传递两个不同的参数来在 IE 中工作。1. Msxml2.XMLHTTP 和 2. Microsoft.XMLHTTP
他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?
我两个都用过。我没有得到任何例外。两者对我来说都一样。我正在使用 IE 8。
两者实际上都已经过时了。微软古老的 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 之类的库会为你做这件事,抽象出这些晦涩难懂的浏览器怪癖。我强烈建议学习其中一个库。
乔丹·里格
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) {}
};
}