- readyState(状态值)
readyState是XMLHttpRequest对象的一个属性,该属性表示请求/响应过程的当前活动阶段,所以readyState可以认为是Ajax状态值。
有5种可取值:
0:未初始化。 尚未调用open()方法
1:启动。已经调用open()方法,但尚未调用send()方法。
2:发送。已经调用send()方法。但未接收到响应。
3:接收。已经接收到部分响应数据。
4:完成。已经接收到全部响应数据,而且已经可以在客户端使用了。
只要当readyState属性的值有一个变成另一个值时,都会触发一次readystatechange事件,通常只对readyState值为4的阶段感兴趣,所以一般会进行如下事件绑定
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 ){
...
}
}
- status(状态码)
status是XMLHttpRequest对象的一个属性,是对响应的http状态的一个说明,所以status可以认为是http状态码。无论ajax进行到哪一个步骤,都会有相应的status,也就是说在每一个readyState值下都有不同的status值。
状态码的5大类:
1xx:信息响应类,表示接收到请求并且继续处理。
2xx:处理成功响应类,表示动作被成功接收、理解和接受。
3xx:重定向响应类,表示为了完成指定的动作,必须接收进一步的处理。
4xx:客户端错误,表示客户请求包含语法错误或者不能正确执行。
5xx:服务端错误,表示服务器不能正确执行一个执行的请求。
当readyState值为4时表示服务器响应完成,客户端接收到了全部的数据,但是否是我们需要的数据无法确定,所以通常需要在确定了接收到全部数据后还要检查status的值,有如下处理。
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status >= 200 && xhr.status < 300){
...
}
}
}
也可以
xhr.onreadystatechange = function(){
//从效率上而言,对于readyState值的确定放到前面,效率更高
if(xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 300){
...
}
}