覆盖XMLHttpRequest的send方法

use*_*760 8 javascript xmlhttprequest

我正在尝试通过覆盖XMLHttpRequest的send函数来记录(以及稍后修改)XMLHttpRequest发送到服务器的数据.我的函数将数据正确记录到控制台,但请求没有完成,因此浏览器会无限期地等待响应.任何想法代码有什么问题?

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) { console.log("data: " + vData); realSend(vData); };
XMLHttpRequest.prototype.send = newSend;
Run Code Online (Sandbox Code Playgroud)

ZER*_*ER0 21

你忘记了this:

this.realSend(vData);
Run Code Online (Sandbox Code Playgroud)

但是,您不需要向原型添加新方法:

var send = XMLHttpRequest.prototype.send;

XMLHttpRequest.prototype.send = function(data) {
    send.call(this, data);
}
Run Code Online (Sandbox Code Playgroud)

使用闭包,您还可以避免使用流氓变量:

!function(send){
    XMLHttpRequest.prototype.send = function (data) {
        send.call(this, data);
    }
}(XMLHttpRequest.prototype.send);
Run Code Online (Sandbox Code Playgroud)

  • [感觉标记在功能之前做了什么?](http://stackoverflow.com/q/3755606/238421) (3认同)

xda*_*azz 19

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;
Run Code Online (Sandbox Code Playgroud)