我的JS代码正在发出请求并监视“ xhr.onreadystatechange”。有时它将收集以下预期的日志:
timestamp event method readyState status
1/9/2018 9:08:43.474 xhr_readystatechange POST 1 0
1/9/2018 9:08:46.432 xhr_readystatechange POST 2 200
1/9/2018 9:08:46.432 xhr_readystatechange POST 3 200
1/9/2018 9:08:46.433 xhr_readystatechange POST 4 200
有时它会收集以下未预期的日志:(在这种情况下,在我的应用超时之前的22秒内,readyState从未更改为2)
timestamp event method readyState status
1/11/2018 21:36:25.390 xhr_readystatechange POST 1 0
1/11/2018 21:36:47.249 localSend failed
我明白那个:
readyState 1表示已调用xhr.open,但尚未调用xhr.send
readyState 2表示已调用xhr.send并接收到响应头
我的问题是:如果readyState更改为1但从未更改为2/3/4,实际上是我的POST请求:
从来没有发送过(没有调用xhr.send)?如果是这样,可能是什么原因造成的? xhr.send是否可以在浏览器JS引擎中删除请求?
或者,发送到服务器但由于任何原因卡在服务器上(因此响应头未准备好)。
请注意,这是在IE 11上。
谢谢,
最佳答案
如果readyState为1,则仅表示方法open
被调用。这不能说是否发送了请求。如果调用方法send
,则客户端将与服务器建立连接。如果连接失败,将触发事件onerror
。因此,尝试查看错误消息,它将说明原因。
回答问题。
如果send
为1,可能没有调用readyState
,但是如果您想知道是否调用了send
方法,则应该查看代码,并在调用send方法时记录消息。另外,如果readyState为1,并且您已经检查了调用方法send
,则意味着客户端开始与服务器进行建立,因此可能是数据包在路上,并且可能因某种原因而卡住。
简而言之,readyState
无法确定方法send
是否被调用。检查方法是查看代码,并确保是否调用了send
方法。
关于javascript - XMLHttpRequest onreadystatechange在readyState 1和2之间的长时间延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48217557/