自定义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。 在$.ajax
方法中类似于jQuery的beforeSend 。
我的目标是在发送之前监听所有XHR。 如果this.readyState === 1
我想最接近的是检查上面的this.readyState === 1
?
上面的代码会导致像jQuery这样的任何ajax库出现故障,因为我在XMLHttpRequest
上使用了原型吗?
我正在尝试在发送之前听XHR。
然后尝试欺骗send()
方法,而不是open()
方法。
上面的代码会导致像jQuery这样的任何ajax库出现故障,因为我在XMLHttpRequest上使用了原型吗?
不,不是真的。 只要,
- 它们将无法在那些libs选择不使用
XMLHttpRequest
(特别是IE)的情况下工作 - …如果浏览器不支持
XMLHttpRequest
对象(或者不支持访问或修改其原型),甚至会失败 - libs可以通过解除引用函数来解决你的欺骗行为(尽管我不知道任何常见的lib)
- 您的代码使用固定数量的参数调用本机方法,不确定它是否会影响任何内容,并且它不会重新返回结果(即使我们知道它是
undefined
)。 要100%确定,请使用return open.apply(this, arguments);
。