Jquery揭秘系列:ajax原生js实现详解(推荐)
为了功能的明确和清晰,我们把这个ajax代码分为5个部分:
•对象的创建
•onreadystatechange句柄处理
•参数拼接
•Get功能实现
•Post功能实现
1.对象的创建:
首先创建用作XMLHttpRequest对象的XMLHttp变量。把它的值设置为null。
按照web标准创建对象(Mozilla,Opera以及Safari):XMLHttp=newXMLHttpRequest()
按照微软的方式创建对象,在InternetExplorer6及更高的版本可用:XMLHttp=newActiveXObject("Msxml2.XMLHTTP")
如果捕获错误,则尝试更老的方法(InternetExplorer5.5):XMLHttp=newActiveXObject("Microsoft.XMLHTTP")
varxhrFactory=function(){ this.init.apply(this,arguments); } xhrFactory.prototype={ init:function(){ this.xhr=this.create(); }, create:function(){ varxhr=null; try{ if(window.XMLHttpRequest){ xhr=newXMLHttpRequest(); } elseif(window.ActiveXObject){ xhr=newActiveXObject("Msxml2.Xmlhttp"); } } catch(err){ xhr=newActiveXObject("Microsoft.Xmlhttp"); } returnxhr; } }
2.onreadystatechange句柄:
readystate:function(timeout,callback){ this.xhr.onreadystatechange=function(){ if(this.readyState==4&&this.status==200){ callback(eval("("+this.responseText+")")); } else{ setTimeout(function(){ this.xhr.abort(); },!timeout?15000:timeout); } } }
这里面要说一下readyState和status属性。
readyState:
1.创建MLHTTP对象
2.打开与服务器的连接
3.发送指令
4.等待处理请求结果 。
status:
200.请求成功
400.请求错误。。。
还有很多值,这里就不一个个说了。
timeout参数是请求过期时间
callback参数,回调对返回数据做了处理,转换成对象。
3.参数拼接
para:function(data){ vardatastr=""; if(data&&Object.prototype.toString.call(data)=="[objectObject]"){ for(variindata){ for(vari=0;i<length;i++){ datastr+=i+"="+data[i]+"&"; } } } returndatastr; }
这里是将传入的对象参数拼接成字符窜,用于ajax请求时发送参数。
4.Get功能实现:
get:function(url,data,callback,async,timeout){ this.readystate(timeout,callback); varnewurl=url; vardatastr=this.para(data); newurl=url+"?"+datastr; this.xhr.open("get",newurl,!async?true:async); this.xhr.send(null); }
get请求,发送的参数是直接在url上拼接的,而不是在send里面发送,而post方式参数则是在send里面发送。
5.Post功能实现
post:function(url,data,callback,async,timeout){ this.readystate(timeout,callback); varnewurl=url; vardatastr=this.para(data); this.xhr.open("post",newurl,!async?true:async); this.xhr.setRequestHeader("content-type","x-www-form-urlencoded"); this.xhr.send(!datastr?null:datastr); }
post这里面多了一段代码:this.xhr.setRequestHeader("content-type","x-www-form-urlencoded");
这段代码其实是说明将整个发送内容作为一个整体进行编码,get则是单个参数进行编码拼接,这也是post和get的区别。
调用方式如下:
varxhr=newxhrFactory(); xhr.post("test.ashx",null,function(data){ alert(data); });
以上这篇Jquery揭秘系列:ajax原生js实现详解(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。