我在理解XMLHttpRequest的处理程序时遇到了一些问题。规范说明了有关onerror处理程序的信息:
XMLHttpRequest
onerror
error [Dispatched …]请求失败时。 load [Dispatched …]请求成功完成时。
error [Dispatched …]请求失败时。
error
load [Dispatched …]请求成功完成时。
load
问题是,“请求失败”是什么意思。那可能是
另外,我想知道这是否意味着onerror并且onload永远不应同时触发。
onload
该参考指示onerror处理程序应取决于执行status代码,并onload根据readyState。这表明它们并不相互排斥,但是,我认为这不是权威信息。
status
readyState
我问是因为使用最新的Opera快照,我发现onload即使在404状态代码上也被触发。我知道测试status是肯定的选择,但是我想知道这是我必须按照规范执行的操作,还是只是Opera中错误的解决方法。
如评论中所述,onerror在 网络级别 出现故障时触发。如果错误仅在应用程序级别存在,例如,发送了HTTP错误代码,则onload仍然会触发。您需要在onreadystatechange处理程序中显式测试返回的状态代码。
onreadystatechange
请注意,被拒绝的跨域请求也会触发onerror处理程序。