【发布时间】:2011-06-10 16:29:50
【问题描述】:
我希望两个对象调用都引用 ActiveXObject。 但是为什么我们要传递两个不同的参数来在 IE 中工作。 1. Msxml2.XMLHTTP 和 2.Microsoft.XMLHTTP
他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?
我都用过。我没有得到任何例外。两者对我来说都是一样的。我使用的是 IE 8。
【问题讨论】:
标签: ajax activexobject
我希望两个对象调用都引用 ActiveXObject。 但是为什么我们要传递两个不同的参数来在 IE 中工作。 1. Msxml2.XMLHTTP 和 2.Microsoft.XMLHTTP
他们都一样吗?或者它们是否依赖于浏览器(IE7 和 IE8)?
我都用过。我没有得到任何例外。两者对我来说都是一样的。我使用的是 IE 8。
【问题讨论】:
标签: ajax activexobject
两者实际上都已过时。微软古老的 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) {}
};
}
【讨论】:
if('ActiveXObject' in window){return new ActiveXObject("Microsoft.XMLHTTP")}