如何解决修补 XMLHttpRequest 并创建一个 4XX 或 5XX
我试图在浏览器 (devtools) 中模拟响应,所以我修补了 XMLHttpRequest。 This 是我用来替换 responseText
的代码var _open = XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method,URL) {
var _onreadystatechange = this.onreadystatechange,_this = this;
_this.onreadystatechange = function () {
if (_this.readyState === 4 && _this.status === 200)) {
try {
//////////////////////////////////////
// THIS IS ACTIONS FOR YOUR REQUEST //
// EXAMPLE: //
//////////////////////////////////////
var data = JSON.parse(_this.responseText); // {"fields": ["a","b"]}
if (data.fields) {
data.fields.push('c','d');
}
// rewrite responseText
Object.defineProperty(_this,'responseText',{value: JSON.stringify(data)});
/////////////// END //////////////////
} catch (e) {}
console.log('Caught! :)',method,URL/*,_this.responseText*/);
}
// call original callback
if (_onreadystatechange) _onreadystatechange.apply(this,arguments);
};
// detect any onreadystatechange changing
Object.defineProperty(this,"onreadystatechange",{
get: function () {
return _onreadystatechange;
},set: function (value) {
_onreadystatechange = value;
}
});
return _open.apply(_this,arguments);
};
这是我发现的模拟响应的最简单方法。但是如何创建 4XX 或 5XX? 我尝试通过添加以下内容将 200 替换为 404
Object.defineProperty(_this,'status',{ value: 404 });
在不同的地方,甚至对于不同的 readyStates,但它不起作用,它总是 200。有什么建议我如何在 4XX 或 5XX 以上的代码中触发?
重现: 将上述代码复制/粘贴到您的控制台中并按如下方式执行:
var oReq = new XMLHttpRequest();
oReq.addEventListener("load",reqListener);
oReq.open("GET",'https://jsonplaceholder.typicode.com/posts/1');
oReq.send();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。