什么时候应该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
事件仍然会被调用,但是您需要手动重新发送请求到新的目的地。