我只需要支持主流现代浏览器(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 documentation在这方面并不清楚。
澄清:
我选择不使用框架。
答案 0 :(得分:17)
如果您的浏览器支持xhr.onload,也许您可以查看this one并查看W3C: XMLHttpRequest它是一样的。需要XMLHttpRequest 2)
如果不存在,你也可以编写一个模拟xhr.onload的包装函数。
(我认为你需要覆盖XMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow}
)。如果你只支持使用xhr.onload的现代浏览器应该可用 - 最好的解决方案是使用框架(如jquery或mootools为其提供包装功能。
答案 1 :(得分:14)
在MDN文档中,他们说明了以下内容
活动
总共支持onreadystatechange作为xhr对象的属性 浏览器。从那时起,实施了许多额外的事件处理程序 各种浏览器(onload,onerror,onprogress等)。这些是 在Firefox中支持。特别是,请参见nsIXMLHttpRequestEventTarget 和使用XMLHttpRequest。
更新的浏览器,包括Firefox,也支持收听 此外,还通过标准的addEventListener API实现XMLHttpRequest事件 将*属性设置为处理函数。
所以我认为你可以假设onreadystatechange是要走的路,而onload是一个可以在浏览器支持时使用的附加功能。 @ mr.VVoo答案是正确的,在有疑问时坚持使用w3c。
答案 2 :(得分:1)
由于最初的提问者说'我需要支持主要的现代浏览器(IE10 +,FF,Chrome,Safari)"很明显,onload
,onerror
等是可行的方法。此外,截至今天,onreadystatechange
已经过时,因为您显然不会支持仅支持onreadystatechange
的任何旧版本。
总结一下,忘掉onreadystatechange
。
答案 3 :(得分:1)
您可以通过执行此操作来清理您的第一个示例
xhr.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
o.callback(xhr.responseText);
} else {
return false;
}
};
注意,如果您使用else语句执行某些操作,则可能还希望使用onload
检查this.status === 200
。虽然,如果您正在检查错误,还有onerror
,您可以编写类似
xhr.onerror = function(){
console.log('Error: Do something else...');
}