自定义XMLHttpRequest.prototype.open

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

回答:

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

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

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

不,不是。只要,

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

以上是 自定义XMLHttpRequest.prototype.open 的全部内容, 来源链接: utcz.com/qa/431992.html

回到顶部