关于XMLHttpRequest

  1. if(this.ActiveXObject && !this.XMLHttpRequest ){  
  2.     var xmlHttpRequstActiveIds = [  
  3.         "Microsoft.XMLHTTP"//IE5的,最早的XHR实现  
  4.         ,"MSXML2.XMLHTTP"  //偷懒的办法,调用的2与3.0的版本
  5.         //,"MSXML2.XMLHTTP.3.0"//应该等价于MSXML2.XMLHTTP  
  6.         //,"Msxml2.XMLHTTP.4.0"   
  7.         ,"Msxml2.XMLHTTP.5.0"  4与5并非针对浏览器
  8.         //,"Msxml2.XMLHTTP.6.0"  IE6
  9.         ];  
  10.     var xmlHttpRequstActiveId  
  11.     this.XMLHttpRequest = function(){  
  12.         if(xmlHttpRequstActiveId){  
  13.             return new ActiveXObject(xmlHttpRequstActiveId);  
  14.         }else{  
  15.             var i=xmlHttpRequstActiveIds.length;  
  16.             while(i --){  
  17.                 try{  
  18.                       var impl = new ActiveXObject(xmlHttpRequstActiveId = xmlHttpRequstActiveIds[i]);  
  19.                       xmlHttpRequstActiveIds = null;  
  20.                       return impl;  
  21.                 }catch (e){}  
  22.             }  
  23.         }  
  24.     };  
  25. }  

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值