首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLHttpRequest在readyState 1和2之间的长延时

XMLHttpRequest在readyState 1和2之间的长延时
EN

Stack Overflow用户
提问于 2018-01-11 23:45:42
回答 1查看 1.4K关注 0票数 1

我的JS代码发送请求并监视"xhr.onreadystatechange“。有时,它会收集预期的下列日志:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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,我的帖子请求实际上是:

  • 从未在线路上发送过(xhr.send未被调用)?如果是的话,是什么原因造成了这种情况?xhr.send可以在浏览器JS引擎中删除请求吗?
  • 或者,发送到服务器,但由于任何原因而被卡在那里(因此响应头还没有准备好)。

注意,这是在IE 11上。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2018-01-12 11:12:20

如果readyState为1,则只意味着调用了open方法。这不能说请求是否已发送。如果调用了方法send,则客户端将使用服务器创建一个机构。如果连接失败,事件onerror将被触发。因此,尝试查看错误消息,它将说明原因。

来回答这个问题。如果send是1,则可能没有调用readyState,但是如果您想知道方法send是否被调用,则应该查看代码,并在调用方法发送时记录消息。另外,如果readyState是1,并且检查了调用send的方法,这意味着客户端开始使用服务器进行建立,所以可能是数据包已经在路上,并且可能因为某种原因而被卡住了。

简而言之,readyState无法判断方法send是否被调用。检查的方法是查看代码,并确保方法send是否被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48217557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档