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

IT技术 javascript ajax xmlhttprequest readystate
2021-01-31 21:19:16

XMLHttpRequest有 5readyState秒,我只使用其中的 1 个(最后一个,4)。

其他的有什么用,我可以在哪些实际应用中使用它们?

5个回答

完整的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,但这并不是普遍支持的,不应依赖。

传输中的错误仍将 readyState 更新为 4。但是,完全中断的传输会将 readyState 重置为 0。因此,由于重定向而导致的传输错误并不是真正的“错误”,您可以选择忽略日志记录/如果 xhr 的 readyState 为 0,则报告错误。它有点脆弱,您的里程可能会有所不同,具体取决于记录每个事件/错误是“必须拥有”还是“很高兴拥有”。如果是后者,您可以承受丢失可能是错误以及 readyState 为 0 的罕见事件。
2021-03-28 21:19:16
我不确定,@vishalsharma——我记得,只要请求没有初始化,readystate 就是 0。之后,任何其他“完成”(成功或错误)都会将就绪状态更新为 4。因此,传输开始后失去互联网会将其翻转为 4,而不是 0。如果传输时从未有过互联网尝试过,它应该仍然是0;它只会在握手后移动到 1。
2021-03-30 21:19:16
readyState 2 的解释是错误的——或者至少完全是误导。Shure 请求已发送,但这些状态实际上表示已收到所有最终响应标头。
2021-04-09 21:19:16
@GregPettit ,我们可以在没有互联网连接的情况下使用 readystate 0 ,或者确实存在“请求未初始化”的任何原因
2021-04-10 21:19:16
+1 给@MattBianco 的建议。我还想补充一点,Mozilla 开发者网络MDN可以说是满足您所有 JavaScript/HTML/CSS 需求的最流行和最值得信赖的参考站点之一。在进行谷歌搜索时,在您的查询前加上“mdn”,这样您就可以省去一些麻烦。
2021-04-11 21:19:16

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

所以这是引用的原始文档,以正确理解 readystate 代表的含义:

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

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

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

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

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

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

请在此处阅读:W3C 对 ReadyState 的解释

嗯,我刚刚在沙箱中尝试过,它似乎有效。
2021-03-20 21:19:16
@CharlesWood ,对我的挑战在这里 stackoverflow Markdown 编辑器不会接受参考 w3c .. 退房因此我从 goo.gl 放了短网址.. 我不明白为什么它不允许我直接放w3c 网址...
2021-04-08 21:19:16

原始权威文件

01并且2只跟踪到目前为止您调用了多少个必要的方法来发出请求。

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

readyState4是唯一具有任何意义的状态。

(*:关于我能想到的检查 readyState 的唯一可能用途3是它在服务器端发出某种形式的生命信号,因此您可能会增加在收到它时等待完整响应的时间。)

onreadystatechange 存储一个函数(或函数名),在 readyState 属性每次改变时自动调用。 readyState 持有 XMLHttpRequest 的状态。从 0 到 4 的变化:

0:请求未初始化

1:服务器连接建立

2:收到请求

3:处理请求

4:请求完成,响应准备好

状态 200:“正常”

404页面不存在

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

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