如何在一个地方处理XMLHttpRequest错误

时间:2012-07-19 06:54:34

标签: xmlhttprequest

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

由于

1 个答案:

答案 0 :(得分:3)

如果您只有一个XMLHttpRequest对象,那么在操作完成时,您将监听readystatechange事件以检测,然后读取status属性以检测错误。

现在,如果要对所有对象执行此操作,则需要侦听所有正在发生的readystatechange事件,即如果创建或初始化XMLHttpRequest,则注册到相应的事件。这可以通过覆盖XMLHttpRequest原型的open方法来完成,这样它就可以注册你的事件监听器,然后调用旧的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);

(假设每个XMLHttpRequest对象只调用open一次,或者您的事件多次注册,如果您想要安全,可以通过添加this.open = open;重置open函数