我一直在尝试重写方法以拦截xhr请求,但似乎我所做的所有事情都只为此this.readyState贴上“ 1”。 有谁知道为什么吗?
addInterceptorsToXHRRequests() {
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function() {
const originalStateChangeHandler = this.onreadystatechange;
this.onreadystatechange = function() {
console.log(' ---> ',this.readyState);
if (originalStateChangeHandler instanceof Function) {
originalStateChangeHandler.apply(this, arguments);
console.log('Ready state: ' + this.readyState);
}
};
return originalOpen.apply(this, arguments);
};
}
在componentDidMount生命周期方法结束时,我从index.js调用此函数。 (相当大的项目)
答案 0 :(得分:1)
发生这种情况是因为您在 XMLHttpRequest.prototype.open 上绑定了一个函数。
打开仅返回状态1。 因此,您需要将onreadystatechange函数附加到完整的xhr。
示例
// you probably want the original XMLHttpRequest here...
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
console.log(xhr.readyState);
};