我们在做每件事情的时候都会分先后循序,什么时间段做什么事情,而 ajax 亦是一样,我们在使用原生 ajax 发送请求时,也是有一个过程,而聪明到没头发(聪明绝顶)的程序员将这个过程分为了五个阶段,每一个阶段对应不同的事件。
readyState的五个状态值分别是
值 | 状态 | 描述 |
---|---|---|
0 | UNSENT | 代理被创建,但尚未调用 open() 方法。 |
1 | OPENED | open() 方法已经被调用。 |
2 | HEADERS_RECEIVED | send() 方法已经被调用,并且头部和状态已经可获得。 |
3 | LOADING | 下载中;responseText 属性已经包含部分数据。 |
4 | DONE | 下载操作已完成。 |
1
: 初始化 XMLHttpRequest
对象,此时这个对象已被创建但是 open()
方法未被调用
2
: 调用 open()
方法 ,在 open()
这个方法中填写请求方式和请求地址,前端培训在这个阶段时可以使用 setRequestHeader()
添加请求头信息
3
: 调用 send()
方法,将请求发送至服务端
4
: 响应体部分正在被接收。如果 responseType
属性是“text”或空字符串, responseText
将会在载入的过程中拥有部分响应数据
5
: 请求发送完毕,此时意味着请求彻底完成或者发送失败
举个简单的例子
将请求这个过程比喻成上网买东西
0
: 此时是点击立即购买的时候
1
: 在这个阶段对应的就是选择付款方式和收货地址
2
: 这里对应的就是立即付款
3
: 在这里对应的就是,当你点击立即付款之后他会将物品发货也就是返回了数据,但又没完全返回,对应的就是你已经可以宣布收到物品了但又没完全收到。
4
: 此时就是你收到货物了,脸上露出了猥琐的笑容,浅浅的笑容就让你感到比中奖还要光荣,拆完箱子之后就决定这个商品喜不喜欢,喜欢就请求完成,不喜欢就退货请求失败。