什么时候应该XMLHttpRequest的onerror处理程序启动

理解XMLHttpRequest的处理程序有点问题。 规范说这个关于error handling程序 :

error [Dispatched …]请求失败时。

load [Dispatched …]请求成功完成时。

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

  • 该请求根本不能被发出(例如连接被拒绝等错误),或者
  • 上面加上服务器返回了一个错误代码(例如404)

另外,我想知道这是否意味着错误和onload不应该同时开火。

这个引用指出应该根据status码执行onerror处理程序,并根据readyState执行onload 。 这表明它们不是相互排斥的,但是,我不认为这是一个权威的信息。

我在问,因为使用最新的Opera快照,我发现onload即使在404状态码上也被触发。 我知道testingstatus是一个肯定的select,但是我想知道这是我必须要做的每个规范还是只是一个解决scheme,在Opera中的错误。

正如评论中提到的那样,当networking层出现故障时,错误就会触发。 如果错误仅在应用程序级别上存在,例如,发送了HTTP错误代码,则onload仍然会触发。 您需要在onreadystatechange处理程序中显式testing返回的状态码。

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

除了apsillers的回答,请注意XMLHttpRequest在后台自动处理redirect,所以你不必在onload事件中检查这个回复代码(这个事件只会在最后一次调用时被调用一次)。 另外请注意,如果使用POST方法发送有效载荷数据,并且请求被redirect,则XMLHttpRequest将方法从POST更改为GET并出于安全原因丢弃任何有效载荷数据。 onload事件仍然会被调用,但是您需要手动重新发送请求到新的目的地。