您的位置:首页 > 理论基础 > 计算机网络

关于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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: