所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均支持 XMLHttpRequest 对象。
语法:var xhr = new XMLHttpRequest();
IE浏览器中XMLHttpRequest对象是作为ActiveX控件实现的。
IE5和IE6语法:
xhr = new ActiveXObject(“Microsoft.XMLHTTP”);
或 xhr = new ActionXObject(“Msxm12.XMLHTTP”);
即:
function createXHR(){
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
if(window.ActiveXObject){
try{
xhr = new ActionXObject(“Msxm12.XMLHTTP”);
}catch(e){
try{
xhr = new ActiveXObject(“Microsoft.XMLHTTP”);
}catch(e){
xhr = null;
}
}
}
}
return xhr;
}
以上方法提供的XMLHttpRequest对象创建方法,解决了不同浏览器的差异,而且也处理了不同版本IE浏览器之间的差别,所以可以作为创建XMLHttpRequest对象的通用方法。
但是有一个弊端,就是用户如果多次创建XMLHttpRequest对象,每次调用createXHR方法都会进行复杂的判断,所以我们需要使用惰性函数,即当方法执行之后,已经判断出浏览器的执行环境,然后让createXHR重新赋值,赋值后的函数是直接return 对应的方法。
function createXHR(){
var xhr = null,flag = false,
ary = [
function(){
return new XMLHttpRequest;
},
function(){
return new ActiveObject(“Microsoft.XMLHTTP”);
},
function(){
return new ActiveObject(“Msxml2.XMLHTTP”);
}
];
for(var i=0,len=ary.length;i<len;i++){
var curFn = ary[i];
try{
xhr = curFn();
//本次循环未出错,浏览器兼容这个版本,把createXHR重写为当前方法,完成后不需要判断下面的,直接退出循环即可
createXHR = curFn;
flag = true;
break;
}catch(e){
//本次循环获取的方法执行出现错误,继续执行下一次循环
}
}
if(!flag){
throw new Error(“error”);
}
return xhr;
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/76574.html