仅限JavaScript:监控页面上的任何AJAX请求

时间:2014-05-28 07:03:10

标签: javascript ajax response

我的页面中有一些脚本文件因为从其他来源加载到我的页面而无法访问它们。 (解释起来有点复杂)

这些脚本有AJAX请求,所以我想在他们的回复中做一些工作。

在JavaScript(不是jQuery)中是否有任何方法可以监控页面上的任何AJAX请求,以便在AJAX完成请求后我可以做些什么?
(无论如何,那些AJAX请求都不在我手中)

1 个答案:

答案 0 :(得分:2)

这是我用来“劫持”任何XHR(AJAX)请求的一些原生JavaScript,你应该能够接受它并运行它(取决于你有多好,哈哈)。我评论了你感兴趣的部分:)

var xmlreqc = XMLHttpRequest;
XMLHttpRequest = function ()
{
    try
    {
        this.xhr = new xmlreqc();
        return this;
    }
    catch (e) 
    {
        alert(e.message);
        return null;
    }
};

XMLHttpRequest.prototype.open = function (method, url, async, user, password)
{
    try
    {
        return this.xhr.open(method, url, async, user, password); //send it on
    }
    catch (e) 
    {
        alert(e.message);
        return null;
    }
};

XMLHttpRequest.prototype.setRequestHeader = function (header, value)
{
    try
    {
        this.xhr.setRequestHeader(header, value);
    }
    catch (e) 
    {
        alert(e.message);
    }
};

XMLHttpRequest.prototype.send = function (postBody)
{
    var myXHR = null;
    try
    {
        myXHR = this;
        this.xhr.onreadystatechange = function () { myXHR.onreadystatechangefunction(); };
        this.xhr.send(postBody);
    }
    catch (e) 
    {
        alert(e.message); 
    }
};

XMLHttpRequest.prototype.onreadystatechangefunction = function ()
{
    try
    {
        if (this.xhr.readyState == 4)
        {
            //here you will do whatever you want with the response, then send it onwards as if nothing happened
        }
        this.readyState = this.xhr.readyState;
        this.responseText = this.xhr.responseText;
        this.responseXML = this.xhr.responseXML;
        this.status = this.xhr.status;
        this.statusText = this.xhr.statusText;
    }
    catch (e) 
    {
        alert(e.message);
    }
    this.onreadystatechange();
};