Javascript XMLHttpRequest中不同的ReadyState意味着什么,我如何使用它们?
Javascript XMLHttpRequest中不同的ReadyState意味着什么,我如何使用它们?,javascript,ajax,xmlhttprequest,readystate,Javascript,Ajax,Xmlhttprequest,Readystate,XMLHttpRequest有5个readyStates,我只使用其中的1个(最后一个,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
XMLHttpRequest
有5个readyState
s,我只使用其中的1个(最后一个,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
(来自)
实际上,除了4之外,你几乎从不使用它们中的任何一个
当readyState==3
时,某些XMLHttpRequest实现可能会让您在responseText
中看到部分收到的响应,但这并不是普遍支持的,也不应该依赖。
0
、1
和2
只跟踪到目前为止您已调用的请求所需的方法数量
3
告诉您服务器的响应已经开始。但是,当您从网页中使用XMLHttpRequest
对象时,您几乎无法处理该信息(*),因为您无法访问允许您读取部分数据的扩展属性
readyState4
是唯一有意义的
(*:我能想到的检查readyState3
的唯一可能的用途是,它在服务器端发出某种生命形式的信号,因此当您收到完整响应时,您可能会增加等待完整响应的时间。)的回答包含了没有人依赖的w3schools参考,
的答案给出了link,它实际上告诉了IE的本机实现
因此,这里引用了原始文档,以正确理解readystate所代表的含义:
XMLHttpRequest对象可以处于多种状态。readyState属性必须返回当前状态,该状态必须是以下值之一:
未发送(数值0)对象已被构造 已打开(数值1)
已成功调用open()方法。在此状态下,可以使用setRequestHeader()设置请求头,也可以使用send()方法发出请求 接收到的标题(数值2)
所有重定向(如果有的话)都已遵循,并且最终响应的所有HTTP头都已收到。对象的多个响应成员现在可用 加载(数值3)
正在接收响应实体主体 完成(数值4)
数据传输已完成或传输过程中出现问题(例如无限重定向)
请阅读此处:onreadystatechange存储每次readyState属性更改时自动调用的函数(或函数名称) readyState保存XMLHttpRequest的状态。从0更改为4: 0:请求未初始化 1:已建立服务器连接 2:收到请求 3:处理请求 4:请求已完成,响应已准备就绪 状态200:“好的” 404:找不到页面
- 0:已创建未发送的客户端。尚未调用open()
- 1:已调用open open()
- 2:HEADERS\u RECEIVED send()已被调用,并且HEADERS和status 都有
- 3:加载下载;responseText保存部分数据
- 4:操作完成
(来自https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)传输中的错误仍然会将readyState更新为4。但是,完全中断的传输会将readyState重置为0。因此,由于重定向导致的传输错误实际上不是“错误”,如果xhr的readyState为0,您可以选择忽略记录/报告错误。它有点脆弱,根据记录每个事件/错误是“必须拥有”还是“很好拥有”,您的里程数可能会有所不同。如果是后者,您可以将可能是错误的罕见事件以及readyState 0.+1丢失给@MattBianco,以获取他的建议。我还想补充一点,Mozilla开发者网络可以说是最受欢迎和最值得信赖的参考网站之一,可以满足您的所有JavaScript/HTML/CSS需求。在进行谷歌搜索时,在查询前加上“mdn”,这样可以省去一些麻烦。@GregPettit,我们是否可以使用readystate 0,因为没有互联网连接,或者在“请求未初始化”的情况下确实存在任何原因,我不确定@vishalsharma——我记得,只要请求未初始化,readystate就为0。在此之后,任何其他“完成”(通过成功或错误)都会将readystate更新为4。因此,在传输开始后丢失internet会将其翻转到4,而不是0。如果在尝试传输时从未使用过internet,则它仍应为0;只有在握手之后它才会移动到1。readyState 2的解释是错误的——或者至少是完全误导。舒尔已发送请求,但那些州实际上表示已收到所有最终响应标题。@CharlesWood,我的挑战就在这里stackoverflow markdown editor不接受参考w3c。。检查出,因此我把从goo.gl短网址。。。。我不明白为什么它不允许我直接输入W3CURL…嗯,我只是在中试了一下,它似乎奏效了。