确定何时在没有回调的情况下发出XMLHttpRequest请求

Dav*_*nco 6 javascript ajax jquery callback

我正在尝试在JavaScript中重载XMLHttpRequest.*方法,以便网页可以确定是否发生了Ajax请求而没有使用任何侵入式回调.现在,使用大多数JS框架时,这样的工作相对较好:

XMLHttpRequest.prototype.getResponseHeader = function() {
 alert('O hai, looks like you made an AJAX request.');
}
Run Code Online (Sandbox Code Playgroud)

但是,有两个捕获:

  • getResponseHeader不能再用作getResponseHeader.
  • 它在简单的AJAX示例中不起作用.即xmlhttp.open("GET","simple.html",false);

有没有什么方法JS可以镜像XMLHttpRequest.open()或任何方式,我可以链接到它.我已经尝试了一百万个范例(工厂,克隆,包装 - 最多导致无限递归),似乎没有任何工作.也许这是不可能的.有任何想法吗?

Bob*_*Bob 2

在重写方法之前,您可以在某个变量中保留对原始变量的引用,然后在您重写的函数中调用该变量:

var temp = XMLHttpRequest.getResponseHeader;
XMLHttpRequest.getResponseHeader = function() { temp.apply(this, arguments); };
Run Code Online (Sandbox Code Playgroud)

这应该可以让您跟踪使用情况,而不会覆盖原始函数提供的功能。

  • 几乎是正确的。您仍然需要原型操作: XMLHttpRequest.prototype.open = function() { XMLHttpRequestWrapper.apply(this,arguments); 警报('成功了!');}; ——但是感谢您提供了优雅的解决方案。 (3认同)