2010-02-12 168 views
6

我想重载JavaScript中的XMLHttpRequest。*方法,以便网页能够判断出Ajax请求是否发生,而不使用任何侵入式回调。现在,使用最JS框架的时候是这样的工作比较细的:搞清楚什么时候XMLHttpRequest请求没有回调

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

你可以把原来的一个参考一些变量,你覆盖的方法,然后打电话给你了覆盖的功能范围内的变量之前:

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

这应该让你追踪用途没有覆盖所提供的功能原始功能。

+1

temp作为参数应用应该是'this'来维持原始调用的范围 – 2010-02-12 22:13:43

+0

在函数范围内创建它也会更好,因此'temp'变量不在全局范围 – AnthonyWJones 2010-02-12 22:18:38

+0

感谢加比,我编辑过来反映这一点。和安东尼:我总是尽量减少全局,但因为我只需要2行代码来说明我不想让事情复杂化 – Bob 2010-02-12 22:35:29

0

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

+0

关于jQuery总是在IE中使用一个ActiveX对象,即使'XMLHttpRequest'可用:不正确,它只会在'protocol ==“文件中使用:”'。 – 2010-08-29 21:31:56