XMLHttpRequest中的onload是否等于readyState == 4?

我对xhr返回事件感到迷惑,因为我可以说, onreadystatechange之间没有太大的区别– > readyState == 4和onload,这是真的吗?

var xhr = new XMLHttpRequest(); xhr.open("Get", url, false); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { /* do some thing*/ } }; xhr.send(null); 

要么

 xhr.onload = function() { /* do something */ } 

它应该是同样的事情。 onload被添加到XMLHttpRequest 2中,而onreadystatechange自从原来的规范已经出现了。

几乎总是如此。 然而,一个显着的不同之处在于onreadystatechange事件处理程序在onerror处理程序通常被触发(通常是networking连接问题)的情况下也会被readyState == 4触发。 在这种情况下,它的状态为0。 我已经validation了这种情况发生在最新的Chrome,Firefox和IE上。

因此,如果您使用的是onerror并且将目标locking为现代浏览器,则不应该使用onreadystatechange,而应该使用onload,这似乎只能在HTTP请求成功完成时才能被调用(具有真实的响应和状态码)。 否则,如果发生错误,最终可能会触发两个事件处理程序(这是我凭经验发现的这种特殊情况)。

不,他们不一样。 如果遇到networking错误或中止操作,将不会调用onload 。 事实上,最接近readyState === 4事件将是loadend 。 stream程如下所示:

  onreadystatechange readyState === 4 ⇓ onload / onerror / onabort ⇓ onloadend