先上代码
var SimpleXhrFactory=(function(){
var standard={
createXhrObj:function(){
return new XMLHttpRequest();
}
};
var activeXNew={
createXhrObj:function(){
return new ActiveXObject("Msxml2.XMLHTTP");
}
} ;
var activeXOld={
createXhrObj:function(){
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
var testObj;
try{
testObj=standard.createXhrObj();
return standard;
}
catch(e){
try{
testObj=activeXNew.createXhrObj();
return activeXNew;
}
catch(e){
try{
testObj=activeXOld.createXhrObj();
return activeXOld;
}
catch(e){
throw new Error("当前环境没有XHR对象");
}
}
}
})();
这儿单体现在就可以用来生成XHR对象的实例,使用该API的程序猿只要调用了SimpleXhrFactory.createXhrObj()就能得到合适特定运行环境是的XHR对象,用了分支技术后,所有的那些特性嗅探代码都只会执行一次,而不是每生成一个对象就要执行一次。
都写到这里了,再顺手把手写ajax熟悉一下。
//手写AJAX请求
var xhr=SimpleXhrFactory.createXhrObj();
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if((xhr.status>=200&&xhr.status<300)||xhr.status==304){
alert(xhr.responseText);
}
else{
alert(xhr.status);
}
}
}
var url="example.html";
//get
xhr.open("get",url,true); //第三个参数表示是否异步
//post
xhr.open("post",url,false);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send("userName=abc&pwd=123456");