拦截XHR请求,javascript反应

时间:2018-09-17 09:29:59

标签: javascript reactjs xmlhttprequest

我一直在尝试重写方法以拦截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调用此函数。 (相当大的项目)

1 个答案:

答案 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);
};