5
var open = XMLHttpRequest.prototype.open;

XMLHttpRequest.prototype.open = function(method, uri, async, user, pass) {
    this.addEventListener("readystatechange", function(event) {  
    if(this.readyState == 4){
       var self = this;
       var response = {
         method: method,
         uri: uri,
         responseText: self.responseText
      };
      console.log(response);  
    } else {
        console.log(this.readyState);
    }
    }, false);
  open.call(this, method, uri, async, user, pass);
};

我正在尝试在发送 XHR 之前收听它们。方法中类似于 jQuery 的beforeSend的东西$.ajax

我的目标是在发送所有 XHR 之前收听它们。我想最接近的事情是检查上面是否this.readyState === 1

上面的代码会因为我使用原型而导致任何 ajax 库(如 jQuery)发生故障XMLHttpRequest吗?

4

1 回答 1

6

我正在尝试在发送 XHR 之前收听它们。

然后尝试欺骗send()方法,而不是方法open()

上面的代码会因为我在 XMLHttpRequest 上使用原型而导致任何 ajax 库(如 jQuery)发生故障吗?

不,不是。仅有的,

  • 它在那些库选择不使用的地方不起作用XMLHttpRequest(尤其是 IE)
  • …如果浏览器不支持该XMLHttpRequest对象(或不支持访问或修改其原型) ,甚至会失败
  • libs 可能能够通过在您可以之前取消引用函数来解决您的欺骗问题(尽管我不知道任何常见的库)
  • 您的代码使用固定数量的参数调用本机方法,不确定这是否会影响任何内容,并且它不会重新返回结果(即使我们知道它是undefined)。要 100% 确定,请使用return open.apply(this, arguments);.
于 2013-04-02T16:56:59.520 回答