关于XMLHttpRequest
2012-09-12 21:03
357 查看
if(this.ActiveXObject && !this.XMLHttpRequest ){
var xmlHttpRequstActiveIds = [
"Microsoft.XMLHTTP"//IE5的,最早的XHR实现
,"MSXML2.XMLHTTP" //偷懒的办法,调用的2与3.0的版本
//,"MSXML2.XMLHTTP.3.0"//应该等价于MSXML2.XMLHTTP
//,"Msxml2.XMLHTTP.4.0"
,"Msxml2.XMLHTTP.5.0" 4与5并非针对浏览器
//,"Msxml2.XMLHTTP.6.0" IE6
];
var xmlHttpRequstActiveId
this.XMLHttpRequest = function(){
if(xmlHttpRequstActiveId){
return new ActiveXObject(xmlHttpRequstActiveId);
}else{
var i=xmlHttpRequstActiveIds.length;
while(i --){
try{
var impl = new ActiveXObject(xmlHttpRequstActiveId = xmlHttpRequstActiveIds[i]);
xmlHttpRequstActiveIds = null;
return impl;
}catch (e){}
}
}
};
}
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
Microsoft对XMLHTTP的支持不仅限于浏览器,而是面向整个系统和所有程序的,以COM组件的形式存在,出现过很多版本,我们按照先后次序列出如下:
在新的COM组件(DLL)中,都包含了以往的版本(向下兼容)。
ProgID=Microsoft.XMLHTTP.1.0
GUID={ED8C108E-4349-11D2-91A4-00C04F7969E8}
TypeLib={D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E}
VersionIndependentProgID=Microsoft.XMLHTTP
位于C:\WINDOWS\system32\msxml.dll
ProgID=Msxml2.XMLHTTP.2.6
GUID={f5078f1e-c551-11d3-89b9-0000f81fe221}
TypeLib={f5078f18-c551-11d3-89b9-0000f81fe221}
VersionIndependentProgID=Msxml2.XMLHTTP
位于C:\WINDOWS\system32\msxml2.dll
ProgID=Msxml2.XMLHTTP.3.0
GUID={F5078F35-C551-11D3-89B9-0000F81FE221}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
VersionIndependentProgID=Msxml2.XMLHTTP
位于C:\WINDOWS\system32\msxml3.dll
ProgID=Msxml2.ServerXMLHTTP.3.0
GUID={AFB40FFD-B609-40A3-9828-F88BBE11E4E3}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
VersionIndependentProgID=Msxml2.ServerXMLHTTP
位于C:\WINDOWS\system32\msxml3.dll
ProgID=Msxml2.XMLHTTP.4.0
GUID={88D969C5-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\WINDOWS\system32\msxml4.dll
ProgID=Msxml2.ServerXMLHTTP.4.0
GUID={88D969C6-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\WINDOWS\system32\msxml4.dll
ProgID=Msxml2.XMLHTTP.5.0
GUID={88D969EA-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL
ProgID=Msxml2.ServerXMLHTTP.5.0
GUID={88D969EB-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL
一般来说,新的版本会比旧的版本错误更少,性能更好。有时候大家遇到的一些莫名其妙的意外问题,或者效率不佳的情况正是旧版本中的bug,在新版本中可能已经得到改进了。所以我们应该优先考虑使用最新的版本。
像 new ActiveXObject("Microsoft.XMLHTTP") 这样的ActiveX对象调用的其实是1.0版本(最老的)。
要尝试调用更新的版本,则必须指明版本号,也就是使用上面具体列出的ProgID。例如5.0版本是 new
ActiveXObject("Msxml2.XMLHTTP.5.0") 。
推荐写法:
var xmlhttp=null;
if(window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
if(!xmlhttp&&window.ActiveXObject)
{
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.5.0")
}
catch(e)
{
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.4.0")
}
catch(e){
try
{
new ActiveXObject("Msxml2.XMLHTTP")
}
catch(e)
{
try{
new ActiveXObject("Microsoft.XMLHTTP")
}catch(e){
}
}
}
}
}
在ie7+中,使用的已经是内嵌的XMLHttpRequest对象。
if (window.XMLHttpRequest)
{
var oReq = new XMLHttpRequest();
oReq.open("GET", "http://localhost/test.xml");
oReq.send();
alert(oReq.statusText);
}
var xmlHttpRequstActiveIds = [
"Microsoft.XMLHTTP"//IE5的,最早的XHR实现
,"MSXML2.XMLHTTP" //偷懒的办法,调用的2与3.0的版本
//,"MSXML2.XMLHTTP.3.0"//应该等价于MSXML2.XMLHTTP
//,"Msxml2.XMLHTTP.4.0"
,"Msxml2.XMLHTTP.5.0" 4与5并非针对浏览器
//,"Msxml2.XMLHTTP.6.0" IE6
];
var xmlHttpRequstActiveId
this.XMLHttpRequest = function(){
if(xmlHttpRequstActiveId){
return new ActiveXObject(xmlHttpRequstActiveId);
}else{
var i=xmlHttpRequstActiveIds.length;
while(i --){
try{
var impl = new ActiveXObject(xmlHttpRequstActiveId = xmlHttpRequstActiveIds[i]);
xmlHttpRequstActiveIds = null;
return impl;
}catch (e){}
}
}
};
}
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
Microsoft对XMLHTTP的支持不仅限于浏览器,而是面向整个系统和所有程序的,以COM组件的形式存在,出现过很多版本,我们按照先后次序列出如下:
在新的COM组件(DLL)中,都包含了以往的版本(向下兼容)。
ProgID=Microsoft.XMLHTTP.1.0
GUID={ED8C108E-4349-11D2-91A4-00C04F7969E8}
TypeLib={D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E}
VersionIndependentProgID=Microsoft.XMLHTTP
位于C:\WINDOWS\system32\msxml.dll
ProgID=Msxml2.XMLHTTP.2.6
GUID={f5078f1e-c551-11d3-89b9-0000f81fe221}
TypeLib={f5078f18-c551-11d3-89b9-0000f81fe221}
VersionIndependentProgID=Msxml2.XMLHTTP
位于C:\WINDOWS\system32\msxml2.dll
ProgID=Msxml2.XMLHTTP.3.0
GUID={F5078F35-C551-11D3-89B9-0000F81FE221}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
VersionIndependentProgID=Msxml2.XMLHTTP
位于C:\WINDOWS\system32\msxml3.dll
ProgID=Msxml2.ServerXMLHTTP.3.0
GUID={AFB40FFD-B609-40A3-9828-F88BBE11E4E3}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
VersionIndependentProgID=Msxml2.ServerXMLHTTP
位于C:\WINDOWS\system32\msxml3.dll
ProgID=Msxml2.XMLHTTP.4.0
GUID={88D969C5-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\WINDOWS\system32\msxml4.dll
ProgID=Msxml2.ServerXMLHTTP.4.0
GUID={88D969C6-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\WINDOWS\system32\msxml4.dll
ProgID=Msxml2.XMLHTTP.5.0
GUID={88D969EA-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL
ProgID=Msxml2.ServerXMLHTTP.5.0
GUID={88D969EB-F192-11D4-A65F-0040963251E5}
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221}
没有VersionIndependentProgID
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL
一般来说,新的版本会比旧的版本错误更少,性能更好。有时候大家遇到的一些莫名其妙的意外问题,或者效率不佳的情况正是旧版本中的bug,在新版本中可能已经得到改进了。所以我们应该优先考虑使用最新的版本。
像 new ActiveXObject("Microsoft.XMLHTTP") 这样的ActiveX对象调用的其实是1.0版本(最老的)。
要尝试调用更新的版本,则必须指明版本号,也就是使用上面具体列出的ProgID。例如5.0版本是 new
ActiveXObject("Msxml2.XMLHTTP.5.0") 。
推荐写法:
var xmlhttp=null;
if(window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
if(!xmlhttp&&window.ActiveXObject)
{
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.5.0")
}
catch(e)
{
try
{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.4.0")
}
catch(e){
try
{
new ActiveXObject("Msxml2.XMLHTTP")
}
catch(e)
{
try{
new ActiveXObject("Microsoft.XMLHTTP")
}catch(e){
}
}
}
}
}
在ie7+中,使用的已经是内嵌的XMLHttpRequest对象。
if (window.XMLHttpRequest)
{
var oReq = new XMLHttpRequest();
oReq.open("GET", "http://localhost/test.xml");
oReq.send();
alert(oReq.statusText);
}
相关文章推荐
- 关于XMLHttpRequest对象的responseText属性
- 关于JSON(跨域):XMLHttpRequest cannot load file:///E:/static/cartData.json. Cross origin requests..
- 关于浏览器创建XMLHttpRequest对象
- AJAX关于XmlHttpRequest内容
- UIWebView关于XMLHttpRequest的内存泄漏
- 关于XMLHttpRequest cannot load xxx . Cross origin requests are only supported for protocol schemes...
- 关于XMLHttpRequest.open()设置提交方式 (POST,GET)
- 关于chrome控制台警告:Synchronous XMLHttpRequest on the main thread
- 关于XMLHttpRequest的readyState属性的五个状态
- 关于Javascript 中的 FileReader, XMLHttpRequest, Blob, ArrayBuffer, DataURL 等
- CYC-UIWebView关于XMLHttpRequest的内存泄漏
- 关于xmlhttprequest的readystate属性的五个状态
- 关于xmlhttprequest的readystate属性的五个状态(转载)
- XMLHttpRequest 的readyState 对象以及关于请求头status 的含义
- 关于XMLHttpRequest
- 关于谷歌..Synchronous XMLHttpRequest on the main thread is deprecated because of its...
- 关于XMLHttpRequest.responseXML.documentElement=null的问题
- 关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
- 关于xmlhttprequest的readystate属性的五个状态
- 关于纯xmlhttprequest请求服务器数据