54

我在理解XMLHttpRequest的处理程序时遇到了一点问题。规范说明了有关onerror处理程序的内容:

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

load [Dispatched ... ] 当请求成功完成时。

问题是,“请求失败”是什么意思。那可能是

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

另外,我想知道它是否意味着onerror并且onload不应该同时开火。

此参考表明onerror应根据status代码执行处理程序,并onload取决于readyState. 这表明它们不是相互排斥的,但是,我认为这不是权威信息。

我问是因为使用最新的 Opera 快照,我发现onload即使在 404 状态码上也会被触发。我知道测试status是一个肯定的选择,但我想知道这是我必须按照规范执行的操作,还是只是针对 Opera 中的错误的一种解决方法。

4

2 回答 2

80

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

请注意,被拒绝的跨域请求也会触发onerror处理程序。

于 2012-05-14T13:41:11.930 回答
3

除了 apsillers 的回答之外,请注意 XMLHttpRequest 在后台自动处理重定向,因此您不必在事件中检查此回复代码onload(此事件将仅被调用一次 - 在最终调用中)。另请注意,如果您使用 POST 方法发送有效负载数据并且请求被重定向,则 XMLHttpRequest 将方法从 更改POSTGET并出于安全原因丢弃任何有效负载数据。该onload事件仍将被调用,但您需要再次手动将请求重新发送到新目的地。

于 2016-08-14T07:55:23.860 回答