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

时间:2010-02-12 21:29:25

标签: javascript jquery ajax callback

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

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

然而,有两个捕获:

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

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

2 个答案:

答案 0 :(得分:2)

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

var temp = XMLHttpRequest.getResponseHeader;
XMLHttpRequest.getResponseHeader = function() { temp.apply(this, arguments); };

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

答案 1 :(得分:0)

XmlHttp将是一个真正的问题,它是一个COM对象,不支持你想要使用的那种原型操作。更糟糕的是JQuery避免了IE中的XmlHttpRequest,即使它可用它而不是使用XmlHttp。