我想在一个地方处理所有错误。
是否可以在一个处理所有请求的地方将错误处理程序附加到 XMLHttpRequest 对象(或类似的东西)?
谢谢
如果您有单个 XMLHttpRequest 对象,您将侦听readystatechange
事件以检测操作完成时,然后读取status
属性以检测错误。
现在,如果您想对所有对象执行此操作,则需要监听所有发生的readystatechange
事件,即,如果创建或初始化了 XMLHttpRequest,则注册到相应的事件。这可以通过覆盖 XMLHttpRequest 原型的 open-method 来完成,以便它注册您的事件侦听器,然后调用旧的 open。
我为此使用了以下代码(在 Firefox 中):
(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
this.addEventListener("readystatechange", function() {
if (this.readyState==4 && (this.status != 200 && this.status != 301 && this.status != 302)) {
alert("Error: "+this.statusText)
}
}, false);
open.call(this, method, url, async, user, pass);
};
})(XMLHttpRequest.prototype.open);
(这假设open
每个 XMLHttpRequest 对象只调用一次,或者您的事件被多次注册,如果您想安全起见,您可以通过添加来重置开放函数this.open = open;
)