美文网首页
Ajax:如何获取各个浏览器中的 xhr对象

Ajax:如何获取各个浏览器中的 xhr对象

作者: 章柏华 | 来源:发表于2017-08-21 23:52 被阅读0次

2005年,jjg发表了一篇在线文章,他在文章里介绍了一种技术,叫Ajax,是对Asynchronous Javascript+XML的简写。这一技术能够像服务器请求额外的数据而无需卸载页面,会带来更好的用户体验。

Ajax的核心技术是XMLHttpRequest对象(简称XHR),是又微软首先引入的一个特性,其他的浏览器提供商后来都提供了相同的实现。在XHR以前,Ajax通信必须借助一些hack手段,大多数使用隐藏框架和内嵌框架。XHR为向服务器发送请求和解析服务器相应提供了流畅的接口。能够以异步方式从服务器获取更多信息,意味着用户单击后,可以不必刷新页面也能获取到新数据。可就是通过XHR获取新数据,然后通过DOM将新数据插入到页面中。另外,虽然名字包含XML,但是Ajax通信与数据格式无关。

21.1 XMLHttpRequest 对象

IE5是第一款引入XHR对象的浏览器。在IE5中,XHR对象是通过MSXML库中的一个ActiveX对象实现的。因此,在IE中可能会遇到三种不同版本的XHR对象,及MSXML2.XMLHttp、MSXML2.XMLHttp3.0和MSXML2.XMLHttp.6.0。要使用MSXML库中的对象,需要编写一个函数,例如:

//适用于IE7之前版本

function createXHR(){

if(typeof arguments.callee.activeXString != "string"){

var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;

for(i=0,len=versions.lenght;i<len;i++){

try{

      new ActiveXObject(versions[i]);

      arguments.callee.activeXString=versions[i];

     break;

} catch(ex){

//跳过

}

}

}

return new ActiveXObject(arguments.callee.activeXString);

}

这一段是检测浏览器中有没有ActiveXObject对象的。

arguments.callee表示当前执行函数,看activeXString属性中有没有值,没有进入if中,然后循环MSXML函数库,如果有存在的版本,创建new ActiveXObject('这个函数库'),并将版本赋值activeXString属性,然后break循环。这样下一次在用当前函数,就不用在此检测。

假如你只想支持IE7及更高版本,则可以在这个creteXHR函数中加入对原生XHR对象支持。

function creatXHR(){

if(typeof XMLHttpRequest !=  "undefined"){

return new XMLHttpRequest();

}else if(type ActiveXObject != "undefiend"){

//............

}

}

let xhr=createXHR();

这段代码可以直接获取到浏览器中的xhr对象

相关文章

网友评论

      本文标题:Ajax:如何获取各个浏览器中的 xhr对象

      本文链接:https://www.haomeiwen.com/subject/tzicdxtx.html