Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest中不同的ReadyState意味着什么,我如何使用它们?_Javascript_Ajax_Xmlhttprequest_Readystate - Fatal编程技术网

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
对象时,您几乎无法处理该信息(*),因为您无法访问允许您读取部分数据的扩展属性

readyState
4
是唯一有意义的

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

的回答包含了没有人依赖的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…嗯,我只是在中试了一下,它似乎奏效了。