XMLHttpRequest 中的不同就绪状态意味着什么,以及如何使用它们?
-
08-07-2019 - |
题
XMLHttpRequest
有 5 个 readyState
s,我只使用其中的一个(最后一个, 4
).
其他的有什么用途,我可以在哪些实际应用中使用它们?
解决方案
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之外,你几乎从不使用任何一种。
当 readyState == 3
时,某些 XMLHttpRequest实现可能会让您在 responseText
中看到部分收到的响应,但这并不是普遍支持的不应该依赖。
其他提示
kieron 的回答包含w3schools ref。没人依赖, bobince 的回答给出了链接,它实际上讲述了IE的原生实现,
所以这里引用的原始文档正确地理解了readystate代表什么:
XMLHttpRequest对象可以处于多种状态。 readyState属性必须返回当前状态,该状态必须是以下值之一:
UNSENT(数值0)
该对象已经构建。OPENED(数值1)
已成功调用open()方法。在此状态期间,可以使用setRequestHeader()设置请求标头,并且可以使用send()方法进行请求。HEADERS_RECEIVED(数值2)
已遵循所有重定向(如果有)并且已收到最终响应的所有HTTP标头。该对象的几个响应成员现在可用。LOADING(数值3)
正在接收回复实体。完成(数值4)
传输过程中数据传输已完成或出现问题(例如无限重定向)。
请在此处阅读: W3C解释ReadyState
0
, 1
和 2
仅跟踪到目前为止发出请求的必要方法的数量。
3
告诉你服务器的响应已经开始进入。但是当你从网页上使用 XMLHttpRequest
对象时几乎没有(*)你可以处理该信息,因为您无权访问允许您读取部分数据的扩展属性。
readyState 4
是唯一具有任何意义的人。
(*:关于检查readyState 3
的唯一可想到的用途是它在服务器端发出某种形式的生命信号,所以你可能会增加你的时间等你收到它后会得到完整的答复。)
onreadystatechange存储每次readyState属性更改时要自动调用的函数(或函数名称) readyState保存XMLHttpRequest的状态。从0到4的变化:
0:请求未初始化
1:建立服务器连接
2:收到请求
3:处理请求
4:请求已完成且响应已准备好
状态200:“确定”
404:找不到网页
- 0:未发送的客户端已创建。open() 尚未调用。
- 1:OPENED open() 已被调用。
- 2:已调用headers_received send(),并且可以使用标题和状态。
- 3:正在加载 正在下载;responseText 保存部分数据。
- 4:DONE 操作完成。
(来自 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)