可以用xhr.onloadreplacexhr.onreadystatechange用于AJAX调用吗?

我只需要支持主要的现代浏览器(IE10 +,FF,Chrome,Safari)

我可以做这个替代,因为我想简化我的代码库:

从:

xhr.onreadystatechange = function () { if (this.readyState === 4) { if (this.status === 200) { o.callback(xhr.responseText); } else { return false; } } else { return false; } }; 

至:

 xhr.onload = function (test) { o.callback(xhr.responseText); }; 

我不认为MDN文件在这方面是明确的。

澄清:

我select不使用框架。

也许你看看这个 ,看一看W3C:XMLHttpRequest ,如果你的浏览器支持xhr.onload,就是一样的。 需要XMLHttpRequest 2)

如果不存在,你也可以编写一个模拟xhr.onload的包装函数。 (我想你需要重写XMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow} )。 如果你只支持使用xhr.onload的现代浏览器应该是可用的 – 最好的解决scheme是使用一个框架 (如提供包装function的jquery或mootools 。

在MDN文档中,他们声明如下

活动

onreadystatechange作为xhr对象的属性在所有浏览器中都受支持。

从那时起,许多附加的事件处理程序在不同的浏览器中执行(onload,onerror,onprogress等)。 这些在Firefox中受支持。 具体请参见nsIXMLHttpRequestEventTarget和Using XMLHttpRequest。

包括Firefox在内的更新浏览器还支持通过标准addEventListener API监听XMLHttpRequest事件,并将*属性设置为处理函数。

所以我认为你可以假设onreadystatechange是要走的路,而onload是一个可以在浏览器支持的情况下使用的附加。 @ mV.VVoo答案是正确的,有疑问时坚持w3c。

由于原来的提问者说:“我只需要支持主要的现代浏览器(IE10 +,FF,Chrome,Safari)”,显然, onloadonerror等是要走的路。 另外,就像今天一样, onreadystatechange已经过时了,因为你显然不会支持任何只支持onreadystatechange老东西。

总结一下,忘记onreadystatechange

你可以通过这个来清理你的第一个例子

 xhr.onreadystatechange = function () { if (this.readyState === 4 && this.status === 200) { o.callback(xhr.responseText); } else { return false; } }; 

请注意,如果您正在使用else语句执行某些操作,则可能还需要使用this.status === 200来检查onload 。 虽然,如果你正在检查错误,也有错误,你可以写一些类似的东西

 xhr.onerror = function(){ console.log('Error: Do something else...'); }