0

我想在一个地方处理所有错误。
是否可以在一个处理所有请求的地方将错误处理程序附加到 XMLHttpRequest 对象(或类似的东西)?

谢谢

4

1 回答 1

3

如果您有单个 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;

于 2012-07-26T21:43:50.587 回答