Javascript 重写XMLHttpRequest';s发送方法

Javascript 重写XMLHttpRequest';s发送方法,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我试图通过覆盖XMLHttpRequest.send函数来记录(并在以后修改)数据XMLHttpRequest发送到服务器 My函数将数据正确地记录到控制台,但是请求没有完成,因此浏览器会无限期地等待响应 你知道代码有什么问题吗 XMLHttpRequest.prototype.realSend=XMLHttpRequest.prototype.send; var newSend=function(vData){console.log(“数据:+vData);realSend(vData);};

我试图通过覆盖
XMLHttpRequest.send
函数来记录(并在以后修改)数据
XMLHttpRequest
发送到服务器

My函数将数据正确地记录到控制台,但是请求没有完成,因此浏览器会无限期地等待响应

你知道代码有什么问题吗

XMLHttpRequest.prototype.realSend=XMLHttpRequest.prototype.send;
var newSend=function(vData){console.log(“数据:+vData);realSend(vData);};
XMLHttpRequest.prototype.send=newSend;

您忘记了此

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);

假设要更改的数据是JSON字符串,您可以编写如下拦截器:

//包含变量和的闭包!避免与其他代码可能出现的连接问题。
!函数(){
XMLHttpRequest.prototype.\u original\u send=XMLHttpRequest.prototype.send;
let interceptor_send=函数(数据){
试一试{
//将数据添加到JSON字符串中,
//转换JSON对象以验证其内容并添加属性。
obj=JSON.parse(数据);
对象。自定义添加的数据='您的数据';
让new_data=JSON.stringify(obj);
这是原始发送(新数据);
}
捕捉(错误){
//如果有效负载不是JSON字符串,
//不要添加任何内容并发送原始有效负载。
本文件为原始文件,发送(数据);
}
};
XMLHttpRequest.prototype.send=拦截器_send;
}();

可能重复感谢您的关闭建议,这样代码看起来确实干净多了。
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;