覆盖 post 个请求
Override post requests
我在控制台中输入了以下代码:
XMLHttpRequest.prototype.send = function(body) {
// modifies inputted request
newBody = JSON.parse(body);
newBody.points = 417;
// sends modified request
this.realSend(JSON.stringify(newBody));
}
按理说每次发请求都是417积分,但是我看请求体,还是说原来的积分数。有帮助吗?
尝试在修改后的 XMLHttpRequest.prototype.send
中添加 alert()
或 console.log()
以检查它是否真的有效。有一种方法可以悄悄地防止这种修改。
正如其他人所指出的,如果不了解您是如何创建的 this.realSend
。
,则很难准确诊断您遇到的错误
但是,此代码将起作用:
const send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function (body) {
const newBody = JSON.parse(body);
newBody.points = 417;
send.call(this, JSON.stringify(newBody));
};
请注意,我没有将原始 send
方法存储在 XMLHttpRequest.prototype
上,而是保存在一个单独的变量中,并通过 [=15] 使用正确的 this
值简单地调用它=].这似乎是一个更简洁的实现,与其他代码发生冲突的可能性更小。
有关工作示例,请参阅 this codesandbox。
如果您的函数未被调用,可能 fetch
用于发出 ajax 请求。
所以你可以像这样包装两个函数
const send = XMLHttpRequest.prototype.send;
const _fetch = window.fetch;
XMLHttpRequest.prototype.send = function (body) {
const newBody = JSON.parse(body);
newBody.points = 417;
send.call(this, JSON.stringify(newBody));
};
window.fetch = function(url, options){
let newBody;
if(options.body) {
newBody = JSON.parse(options.body);
newBody.points = 417;
options.body = JSON.stringify(newBody);
}
_fetch.call(this, url, options);
}
我在控制台中输入了以下代码:
XMLHttpRequest.prototype.send = function(body) {
// modifies inputted request
newBody = JSON.parse(body);
newBody.points = 417;
// sends modified request
this.realSend(JSON.stringify(newBody));
}
按理说每次发请求都是417积分,但是我看请求体,还是说原来的积分数。有帮助吗?
尝试在修改后的 XMLHttpRequest.prototype.send
中添加 alert()
或 console.log()
以检查它是否真的有效。有一种方法可以悄悄地防止这种修改。
正如其他人所指出的,如果不了解您是如何创建的 this.realSend
。
但是,此代码将起作用:
const send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function (body) {
const newBody = JSON.parse(body);
newBody.points = 417;
send.call(this, JSON.stringify(newBody));
};
请注意,我没有将原始 send
方法存储在 XMLHttpRequest.prototype
上,而是保存在一个单独的变量中,并通过 [=15] 使用正确的 this
值简单地调用它=].这似乎是一个更简洁的实现,与其他代码发生冲突的可能性更小。
有关工作示例,请参阅 this codesandbox。
如果您的函数未被调用,可能 fetch
用于发出 ajax 请求。
所以你可以像这样包装两个函数
const send = XMLHttpRequest.prototype.send;
const _fetch = window.fetch;
XMLHttpRequest.prototype.send = function (body) {
const newBody = JSON.parse(body);
newBody.points = 417;
send.call(this, JSON.stringify(newBody));
};
window.fetch = function(url, options){
let newBody;
if(options.body) {
newBody = JSON.parse(options.body);
newBody.points = 417;
options.body = JSON.stringify(newBody);
}
_fetch.call(this, url, options);
}