1

我的 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

其他时候它会收集以下日志,这是不期望的:(在这种情况下,readyState 在我的应用程序超时之前的 22 秒内从未更改为 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 尚未被调用)?如果是这样,可能是什么原因造成的?请求可以被浏览器 JS 引擎中的 xhr.send 丢弃吗?
  • 或者,发送到服务器但由于某种原因被卡在那里(因此响应标头尚未准备好)。

请注意,这是在 IE 11 上。

谢谢,

4

1 回答 1

1

如果 readyState 为 1,则仅表示open调用了该方法。这不能说请求是否已发送。如果send调用了该方法,客户端将与服务器建立联系。如果连接失败,onerror将触发该事件。因此,请尝试查看错误消息,它会说出原因。

回答问题。如果为 1,则可能send未调用readyState,但如果您想知道该方法send是否被调用,您应该查看代码,并在调用方法 send 时记录消息。另外,如果 readyState 为 1,并且您检查了该方法send是否被调用,则意味着客户端开始与服务器建立连接,因此可能是数据包在途中,并且可能会卡住一段时间原因。

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

于 2018-01-12T11:12:20.893 回答