原生AJAX封装的简单实现
回归下原生js,网上看到的AJAX封装,遂拿来改改,不知还有何弊端,望指出!
varajaxHelper={
/*1.0浏览器兼容的方式创建异步对象*/
makeXHR:function(){
//声明异步对象变量
varxmlHttp=false;
//声明扩展名
varxmlHttpObj=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","MSXML.XMLHttp"];
//判断浏览器是否支持XMLHttpRequest,如果支持,则是新式浏览器,可以直接创建
if(window.XMLHttpRequest){
xmlHttp=newXMLHttpRequest();
}
//否则,只能循环遍历老式浏览器异步对象名,尝试创建,知道创建成功为止
elseif(window.ActiveXObject){
for(i=0;i<xmlHttpObj.length;i++){
xmlHttp=newActiveXObject(xmlHttpObj[i]);
if(xmlHttp){
break;
}
}
}
//判断异步对象是否创建成功,如果成功,则返回异步对象,否则返回false
returnxmlHttp?xmlHttp:false;
},
/*2.0发送Ajax请求*/
doAjax:function(method,url,data,isAyn,callback,type){
method=method.toLowerCase();
//2.1创建异步对象
varxhr=this.makeXHR();
//2.2设置请求参数(如果是get,则带url参数,如果不是,则不带)
xhr.open(method,url+(method=="get"?"?"+data:""),isAyn);
//2.3根据请求谓词(get/post),添加不同的请求头
if(method=="get"){
xhr.setRequestHeader("If-Modified-Since",0);
}else{
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
//2.4设置回调函数
xhr.onreadystatechange=function(){
//如果接受完毕服务器发回的响应报文
if(xhr.readyState==4){
//判断状态码是否正常
if(xhr.status==200){
if(type.toLowerCase()=="json"){
varret={};
try{
if(typeofJSON!="undefined"){
ret=JSON.parse(xhr.responseText);
}else{
//IE8以下不支持JSON
ret=newFunction("return"+xhr.responseText)();
}
callback(ret);
}catch(e){
console.log(e.message);
callback(false);
}
}else{
//直接返回文本
callback(xhr.responseText);
}
}else{
console.log("AJAXStatusCode:"+xhr.status);
callback(false);
}
}
};
//2.5发送(如果是post,则传参数,否则不传)
xhr.send(method!="get"?data:null);
},
/*3.0直接发送Post请求*/
doPost:function(url,data,isAyn,callback,type){
this.doAjax("post",url,data,isAyn,callback,type);
},
/*4.0直接发送Get请求*/
doGet:function(url,data,isAyn,callback,type){
this.doAjax("get",url,data,isAyn,callback,type);
}
};
假设一个需求,后端要求传入两个数字n1、n2,然后返回总和。
当其中一个参数为空或者不是数字时,返回:{"status":"0","msg":"参数有误!"}
当正确的时候,返回:{"status":"1","sum":"//n1加n2的和"}
后端的代码就不贴出来了。
前端调用:
document.getElementById("btnSubmit").onclick=function(){
ajaxHelper.doPost("后端url","n1=10&n2=25",true,function(ret){
if(!ret){return;}
if(ret.status!=1){
alert(ret.msg);
return;
}
varn=ret.sum;
vars=ret.status;
},"json");
};
以上这篇原生AJAX封装的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。