首页 > 代码库 > ajax 底层源码解析
ajax 底层源码解析
对象: XMLHttpRequest
属性:
readyState
请求状态,开始请求时值为0直到请求完成这个值增长到4
responseText
目前为止接收到的响应体,readyState<3此属性为空字符串,=3为当前响应体,=4则为完整响应体
responseXML
服务器端相应,解析为xml并作为Document对象返回
status
服务器端返回的状态码,=200成功,=404表示“Not Found”
statusText
用名称表示的服务器端返回状态,对于“OK”为200,“Not Found”为400
方法:
setRequestHeader()
向一个打开但是未发生的请求设置头信息
open()
初始化请求参数但是不发送
send()
发送Http请求
abort()
取消当前相应
getAllResponseHeaders()
把http相应头作为未解析的字符串返回
getResponseHeader()
返回http相应头的值
事件句柄:
onreadystatechange
每次readyState改变时调用该事件句柄,但是当readyState=3有可能调用多次
// JavaScript Document var ajax={ post:function(url,data,func){//导入3个参数 //创建ajax对象 var xhr=null; if(window.ActiveXObject){//处理兼容问题 xhr = new ActiveXObject("Msxml2.XMLHTTP")||new ActiveXObject("Microsoft.XMLHTTP"); }else{ xhr = new XMLHttpRequset(); } //建立连接 xhr.open("post",url,true);//method url true=异步 //发送请求 xhr.setRequsetHeader("Content-Type","application/x-www-form-urlencoded"); xhr.send(data); //获取响应 xhr.onreadystatechange = function(){//判断 需满足两个条件 if(xhr.readyState==4){ if(xhr.status==200){ var str = xhr.responseText;//str 为json数据 if(typeof func=="function"){//判断func是否为函数,为函数时调用 func(str);//回调函数 } } } } },//","必须添加 get:function(url,func){//导入两个参数 //创建ajax对象 var xhr = null; if(window.ActiveXObject){ xhr = new ActiveXObject("Msxml2.XMLHTTP")||new ActiveXObject("Microsoft.XMLHTTP"); }else{ xhr = new XMLHttpRequset(); } //建立连接 xhr.open("get",url,true); //发送请求 xhr.send(); //获取响应 xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){ var str = xhr.responseText; if(typeof func == "function"){ func(str); } } } } }
从代码我们看出:首先我们创建一个 XMLHttpRequest 对象(由于浏览器不同需要 相应判断处理),设置相应的请求信息(通过open来做,例如请求地址等 设置 );然后我们绑定 onreadystatechange 事件,在这个事件中我们根 据服务器返回状态的不同来做出不同处理,这其中主要是请求成功后接收相应的返回值来通过 javascript 对客户端做出相应操作(我 们只是使显示有关信息);最后我们发送这个请 求(通过send方法)。
ajax 底层源码解析