readyState属性
Ajax从创建xhr对象开始,一直到完全接收服务器返回的结果为止;我们可以把整个请求响应过程划分为5个阶段。并且可以使用 xhr.readyState 属性检测当前请求执行到哪个阶段了。
readyState属性值为一个数字,不同的数字表示Ajax的不同状态。
- 如果状态值为0(xhr.readyState === 0),初始状态,表示xhr对象一定创建了。
- 如果状态值为1(xhr.readyState === 1),表示open一定调用了
- 如果状态值为2(xhr.readyState === 2),表示send一定调用了,并且已经接收到响应头。
- 如果状态值为3(xhr.readyState === 3),表示正在接收服务器返回的数据(可能已接收完毕,也可能正在接收中,取决于数据量的大小)
- 如果状态值为
4
(xhr.readyState === 4
),表示Ajax请求~响应过程完成
onreadystatechange事件
onreadystatechange 翻译过来是 当Ajax的请求状态改变的时候。
所以,它是配合上述的 readyState 使用的事件。
事件具体的触发时机如下:
- readyState属性值改变的时候
- 0 --> 1
- 1 --> 2
- 2 --> 3
- 3 --> 4
- 接收到的数据量改变的时候,此时 readyState 的值保持为3,但也会触发 onreadystatechange 事件(发生在分块接收大量数据的时候)
所以,绑定的onreadystatechange事件,可能会触发多次。