ajax里的status和readystate
先看ajax封装函数
1 function ajaxFunc(method,url,data,callback) { 2 var xhr; 3 if (XMLHttpRequest) { 4 xhr = new XMLHttpRequest(); 5 } else { 6 xhr = new ActiveXobject('Microsoft.XMLHttp') 7 } 8 method = method.toUpperCase(); 9 if(method == 'GET'){ 10 xhr.open('GET',url+'?'+data,true); 11 xhr.send(); 12 }else{ 13 xhr.open('POST',url,true); 14 xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');//不设置请求头不行吗???? 15 xhr.send(data) 16 17 } 18 19 xhr.onreadystatechange = function () {//ajax是异步的,所有必须监听xhr的发送请求状态变化 20 if (xhr.readyState == 4) { //0:open完成 1:send完成 2接受到服务器响应 3解析响应中 4解析完成 21 if (xhr.status == 200) {//404:notfound 500:服务器内部错误 304;取缓存 22 callback(xhr.responseText) 23 } 24 } 25 } 26 }
ajax发送数据后的返回值,为什么要两个状态码都要判断才能够确定responseText是真正的所需数据呢?
readystate:这个是xhr,XMLHttpRequest的实例对象的状态码,表示ajax发送到获取这一过程中所处的不同状态,分别是0到4.
status:是根据http协议,服务器所返回的HTTP头信息代码; 注意的是每次网络请求,可以返回多次这个状态码,每一次xhr的readystate变化,都会返回这种状态码;常见的有200,304.404,500等;
由此可知,单独判断哪一次都不能获取正在的所需数据。