XMLHttpRequest的onerror处理程序何时应该触发

jpa*_*cek 43 javascript ajax xmlhttprequest

理解XMLHttpRequest处理程序时遇到一些问题.规范说明了这个onerror处理程序:

error [Dispatched ...]请求失败时.

load [Dispatched ...]请求成功完成后.

问题是,"请求失败了"是什么意思.那可能是

  • 根本无法发出请求(例如,拒绝连接和此类错误),或者
  • 以上加服务器返回错误代码(例如404)

此外,我想知道它是否意味着onerror并且onload永远不应该同时开火.

此引用表示onerror应根据status代码执行处理程序并onload依赖于readyState.这表明它们并不相互排斥,但是,我不认为这是一个权威的信息.

我问,因为使用最新的Opera快照,我发现onload甚至在404状态代码上被解雇.我知道测试status是一个肯定的赌注,但我想知道这是我必须按照规范做什么,或者只是解决Opera中的错误.

aps*_*ers 67

正如评论中所提到的,onerror网络级别出现故障时会触发.如果错误仅存在于应用程序级别,例如,发送HTTP错误代码,则onload仍会触发.您需要在onreadystatechange处理程序中显式测试返回的状态代码.

请注意,拒绝的跨域请求也将触发onerror处理程序.

  • 或者......可能是因为点击"https:// encrypted.google.com/foobar"重定向到"http:// www.google.com/foobar",浏览器拒绝参与跨域在Ajax请求期间重定向. (6认同)
  • 您如何区分发生了“什么”网络级别故障?我能想到的几个是:DNS查找失败、连接被拒绝、尝试联系服务器超时、等待回复超时、由于CORS而被拒绝以及连接异常终止。 (2认同)