首页 > 解决方案 > 跟踪特定 XMLHTTPRequest 的完成情况

问题描述

是否可以使用纯 JavaScript 确定特定 XMLHttpRequest 何时完成?假设我知道将使用 XMLHttpRequest 请求的资源的 URL,例如:http://www.mywebsite.com/test.json我可以使用 JavaScript 跟踪此请求的完成情况吗?

这是我到目前为止的代码:

var oldXHR = window.XMLHttpRequest;

function newXHR() {
    var realXHR = new oldXHR();
    realXHR.addEventListener("readystatechange", function() {
        if(realXHR.readyState==4 && realXHR.status==200){
            console.log('request was made');
        }
    }, false);
    return realXHR;
 }
 window.XMLHttpRequest = newXHR;

但是,这会跟踪网站上发出的每一个 HTTP 请求,并且不是很有用。我想查明确切的请求并确定它何时完成。怎么可能做到这一点?

标签: javascriptajaxxmlhttprequest

解决方案


您需要“劫持”(实际上是覆盖)该open()方法而不是构造函数。

XMLHttpRequest.prototype.open = (function(realOpen) {
    return function(method, url) {
        if (url === 'http://www.mywebsite.com/test.json') {
            this.addEventListener('readystatechange', function() {
                // ...do what you have to do
            });
        }
        realOpen.apply(this, arguments);
    };
})(XMLHttpRequest.prototype.open);

推荐阅读