可以用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)”,显然, onload
, onerror
等是要走的路。 另外,就像今天一样, 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...'); }