Javascript XMLHttpRequest中是否需要同时检查readyState和status?

Javascript XMLHttpRequest中是否需要同时检查readyState和status?,javascript,xmlhttprequest,http-status-code-200,Javascript,Xmlhttprequest,Http Status Code 200,在中,我们可以看到处理XMLHttpRequest和防止错误的readyState和status组合的语法,如下所示 if (request.readyState == 4 && request.status == 200) { ... } 我一直在使用合取条件信任,认为这两种情况都是独立的,在联系服务器时允许所有四种操作成功组合 昨天,我在想,我突然意识到我无法解释它们可能是什么。它们是什么 所有数据:readyState已完成(4),状态正常(200) 通信错误:ready

在中,我们可以看到处理XMLHttpRequest和防止错误的readyState和status组合的语法,如下所示

if (request.readyState == 4 && request.status == 200) { ... }
我一直在使用合取条件信任,认为这两种情况都是独立的,在联系服务器时允许所有四种操作成功组合

昨天,我在想,我突然意识到我无法解释它们可能是什么。它们是什么

  • 所有数据:readyState已完成(4),状态正常(200)
  • 通信错误:readyState已完成(4)且状态不正常(!200)
  • 尚未完成:readyState尚未完成(!4),状态为OK(200)
  • ?!?!?!::readyState未完成(!4),状态为OK(!200)
  • 特别是,我不明白没有完成的事情怎么可能既正常又不正常(案例3和4)。当尚未完成时,它是否应该始终处于状态OK(或始终处于状态not OK)

    我不明白没有完成的事情怎么可能既正常又不正常(案例3和案例4)

    这不是你测试的目的

    测试是:准备好了吗?不这个条件失败了

    您没有:

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

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

    您使用的语法是以下内容的简写:

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

    如果您使用的是现代浏览器,请考虑使用<代码> OnLoad 事件,而不是<代码> OnRead状态更改> /代码>。请求成功完成后,
    onload
    事件将触发,因此您无需检查
    readyState
    。还有一个对应的
    onerror
    事件。因此,如果
    request.status===200
    仅在
    request.readyState==4
    时才为真(我猜在此之前为null或未定义),那么仅检查第二个if子句是否足够?我缺少什么?
    status
    readyState
    到达
    2
    时将有一个值,因此您的谓词不正确。哦,这就是原因。谢谢我想我已经看到有人解释说在readyState达到值4之前不会设置状态。也许我误解了。非常感谢您的帮助=>+1!列出状态编号及其含义
    if (request.readyState == 4) {
      if (request.status == 200) { ... }
    }