【问题标题】:Is checking for both readyState and status necessary in XMLHttpRequest?在 XMLHttpRequest 中是否需要同时检查 readyState 和状态?
【发布时间】:2013-02-24 21:57:21
【问题描述】:

this discusison中,我们可以看到处理XMLHttpRequest和防止错误readyStatestatus组合的语法如下。

if (request.readyState == 4 && request.status == 200) { ... }

我一直在使用联合条件信任,即这两种情况是独立的,在联系服务器时允许操作成功的所有四种组合。

昨天,我在想,我无法解释它们可能是什么。它们是什么?

  1. 所有花花公子:readyState 已完成 (4),status 正常 (200)。
  2. 错误的通信:readyState 已完成 (4) 而 status 不正常 (!200)。
  3. 尚未完成:readyState 尚未完成 (!4),status 正常 (200)。
  4. ?!?!?!?!: : readyState 未完成 (!4),status 正常 (!200)。

特别是,我不明白未完成的事情如何既可以也可以不可以(案例 3 和 4)。未完成时不应该总是status OK(或者总是status not OK)吗?!

【问题讨论】:

  • 如果您使用的是现代浏览器,请考虑使用onload 事件而不是onreadystatechange。当请求成功完成时会触发onload 事件,因此您无需检查readyState。还有一个对应的onerror事件。

标签: javascript xmlhttprequest http-status-code-200


【解决方案1】:

我不明白未完成的事情如何既可以也可以不可以(案例 3 和 4)。

这不是您要测试的内容。

测试是:准备好了吗?不?这种情况不成立。

你没有:

if (request.readyState != 4 && request.status == 200) { ... }

if (request.readyState != 4 && request.status != 200) { ... }

您只关心请求完成并且正常时的状态。

你的语法是以下的简写:

if (request.readyState == 4) {
  if (request.status == 200) { ... }
}

【讨论】:

  • 所以,如果 request.status === 200 仅在 request.readyState === 4 (我猜是之前的 nullundefined 时)为真,那么仅检查第二个 if 子句还不够吗?我错过了什么?
  • 一旦readyState 达到2status 将有一个值,因此您的谓词不正确。
  • 哦,原来如此。谢谢!我想我已经看到有人解释说 status 直到 readyState 达到 4 的值才会设置。也许我误解了。非常感谢您的帮助 => +1!
猜你喜欢
  • 2014-05-28
  • 2018-11-11
  • 2012-02-29
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2021-11-06
相关资源
最近更新 更多