XMLHttpRequest中不同的readystate是什么意思,我该如何使用它们?


Answers:


172

readyState值的完整列表为:

State  Description
0      The request is not initialized
1      The request has been set up
2      The request has been sent
3      The request is in process
4      The request is complete

(来自https://www.w3schools.com/js/js_ajax_http_response.asp

实际上,除了4之外,几乎几乎不使用它们中的任何一个。

一些 XMLHttpRequest实现可能会让您在responseTextwhen中看到部分接收到的响应readyState==3,但这不是普遍支持的,因此不应依赖。


5
传输中的错误仍然会将readyState更新为4。但是,完全中断的传输会将readyState重置为0。因此,由于重定向而导致的传输中的错误并不是真正的“错误”,您可以选择忽略日志记录/ report如果xhr的readyState为0,则报告错误。这有点脆弱,并且根据记录每个事件/错误是“必须具备”还是“必须拥有”,您的里程可能会有所不同。如果是后者,你赔得起的罕见情况下可能是一个错误与0 readyState的沿
格雷格·佩蒂特

2
向@MattBianco +1寻求建议。我还要补充一点,可以说Mozilla开发人员网络MDN可以满足您的所有JavaScript / HTML / CSS需求,是最受欢迎和可信赖的参考站点之一。在进行Google搜索时,在查询前加上“ mdn”,您会省去一些麻烦。
DondeEstaMiCulo 2014年

@GregPettit,我们可以使用readystate 0进行任何互联网连接吗,或者存在任何原因导致“请求未初始化”
Vishal Sharma 2014年

4
我不确定@vishalsharma -我记得,只要未初始化请求,readystate就为0。此后,任何其他“完成”(无论是成功还是错误)都会将readystate更新为4。因此,在传输开始后丢失Internet会将其翻转为4,而不是恢复为0。尝试,它应该仍然为0;握手后它只会移到1。
格雷格·佩蒂特

readyState 2的解释是错误的,或者至少是完全误导的。Shure发送了请求,但实际上这些状态表明已收到所有最终响应标头。
2013年

32

kieron的答案包含w3schools参考。bobince的答案给了没有人依靠的 链接,它实际上告诉IE的本机实现,

所以这里是引用原始文档以正确理解readystate表示的内容:

XMLHttpRequest对象可以处于几种状态。readyState属性必须返回当前状态,该状态必须是以下值之一:

UNSENT(数值0)
已构造对象。

OPENED(数值1)
已成功调用open()方法。在此状态期间,可以使用setRequestHeader()设置请求标头,并可以使用send()方法进行请求。

HEADERS_RECEIVED(数值2)
已遵循所有重定向(如果有),并且已收到最终响应的所有HTTP标头。该对象的几个响应成员现在可用。

LOADING(数值3)
正在接收响应实体主体。

已完成(数值4)
数据传输已完成或在传输过程中出了点问题(例如,无限重定向)。

请在这里阅读:ReadyState的W3C说明


@CharlesWood,对我的挑战在这里stackoverflow markdown编辑器将不接受引用w3c ..签出,因此我从goo.gl中输入了短网址....我不明白为什么它不允许我直接放w3c url ...
Vishal Sharma 2014年

呵呵,我只是在沙盒中尝试了一下,它似乎起作用了。
查尔斯·伍德

22

原始权威文档

012仅跟踪到目前为止已发出请求的多少种必要方法。

3告诉您服务器的响应已经开始出现。但是,当您使用XMLHttpRequest网页中的对象时,几乎没有任何操作可以使用该信息,因为您无权访问允许扩展的属性。您读取部分数据。

readyState 4是唯一具有任何含义的状态。

(*:我可以想到的用于检查readyState的唯一可能用法3是,它表明服务器端存在某种形式的生命,因此,您可能会增加在等待完整响应时等待的时间。)


1

onreadystatechange存储每次readyState属性更改时将自动调用的函数(或函数名称)readyState保持XMLHttpRequest的状态。从0变为4:

0:请求未初始化

1:建立服务器连接

2:收到请求

3:处理要求

4:请求已完成且响应已准备就绪

状态200:“确定”

404页面不存在


0
  • 0:已创建UNSENT客户端。open()尚未调用。
  • 1:OPENED open()已被调用。
  • 2:已调用HEADERS_RECEIVED send(),并且头和状态可用。
  • 3:LOADING下载;responseText保存部分数据。
  • 4:完成操作已完成。

(来自https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/readyState)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.