小编典典

自定义XMLHttpRequest.prototype.open

ajax

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

上面的代码是否会因为我使用原型而导致诸如jQuery之类的ajax库出现故障XMLHttpRequest


阅读 1146

收藏
2020-07-26

共1个答案

小编典典

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

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

上面的代码是否会因为我在XMLHttpRequest上使用原型而导致jQuery之类的ajax库出现故障?

不,不是。只要,

  • 这些库选择不使用的地方将不起作用XMLHttpRequest(尤其是IE)
  • …甚至在浏览器不支持该XMLHttpRequest对象(或不支持访问或修改其原型)时失败
  • 库可能可以通过在使用之前取消引用功能来解决您的欺骗(尽管我不知道有没有这样做的常见库)
  • 您的代码使用固定数量的参数调用本机方法,不确定是否会影响任何参数,并且不会返回结果(即使我们知道是undefined)。要100%确定,请使用return open.apply(this, arguments);
2020-07-26