2012-03-14 109 views
8

我试图通过覆盖XMLHttpRequest的发送函数将XMLHttpRequest发送到服务器的数据记录(并稍后修改)。我的函数将数据正确地记录到控制台,但请求没有完成,所以浏览器一直等待响应。任何想法有什么问题的代码?覆盖XMLHttpRequest的发送方法

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send; 
var newSend = function(vData) { console.log("data: " + vData); realSend(vData); }; 
XMLHttpRequest.prototype.send = newSend;
+0

可能的重复http://stackoverflow.com/questions/4410218/trying-to-keep-track-of-number-of-outstanding-ajax-requests-in-firefox – 2012-03-14 11:22:54

回答

16
XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send; 
// here "this" points to the XMLHttpRequest Object. 
var newSend = function(vData) { console.log("data: " + vData); this.realSend(vData); }; 
XMLHttpRequest.prototype.send = newSend; 
+0

谢谢,那确实很简单。 – user1268760 2012-03-14 11:57:23

18

你已忘了this

this.realSend(vData); 

但是,你并不需要一个新的方法添加到原型:

var send = XMLHttpRequest.prototype.send; 

XMLHttpRequest.prototype.send = function(data) { 
    send.call(this, data); 
} 

使用封,你也可避免流氓变量:

!function(send){ 
    XMLHttpRequest.prototype.send = function (data) { 
     send.call(this, data); 
    } 
}(XMLHttpRequest.prototype.send); 
+1

谢谢关闭建议,代码看起来似乎更加清洁。 – user1268760 2012-03-14 11:59:42

+3

[感叹号在函数之前做了什么?](http://stackoverflow.com/q/3755606/238421) – 2014-02-21 11:58:33