当前位置: 首页 > 面试题库 >

JavaScript:检测AJAX请求

郭皓
2023-03-14
问题内容

是否可以通过通用JavaScript(而不是框架)检测网页上的全局AJAX调用(尤其是响应)?

我已经在StackOverflow上审查了“JavaScript检测到AJAX事件 ”
的问题,并尝试将接受的答案的代码修补到我的应用程序中,但是没有用。之前,我从未使用AJAX做任何事情,我还不足以对其进行修改以使其正常工作。

我不需要任何花哨的东西,我只需要检测所有(特定的,实际上,但是我必须先检测所有的AJAX响应,然后将它们修补到IF语句中才能使用)。所以,最终,我想要这样的东西:

if (ajax.response == "certainResponseType"){
    //Code
}

, 例如。

更新: 看来我应该澄清一下,我不是在尝试发送请求-我正在开发内容脚本,并且我需要能够 检测
网页的AJAX请求(不是我自己的请求),因此我可以执行检测到响应时起作用。


问题答案:

以下是一些代码(通过粘贴到Chrome31.0.1650.63的控制台中进行测试),用于捕获和记录或以其他方式处理ajax请求及其响应:

(function() {
    var proxied = window.XMLHttpRequest.prototype.send;
    window.XMLHttpRequest.prototype.send = function() {
        console.log( arguments );
        //Here is where you can add any code to process the request. 
        //If you want to pass the Ajax request object, pass the 'pointer' below
        var pointer = this
        var intervalId = window.setInterval(function(){
                if(pointer.readyState != 4){
                        return;
                }
                console.log( pointer.responseText );
                //Here is where you can add any code to process the response.
                //If you want to pass the Ajax request object, pass the 'pointer' below
                clearInterval(intervalId);

        }, 1);//I found a delay of 1 to be sufficient, modify it as you need.
        return proxied.apply(this, [].slice.call(arguments));
    };


})();

此代码以可接受的答案解决了上述问题:

请注意,如果使用框架(如jQuery),则可能无法正常工作,因为调用send后它们可能会覆盖onreadystatechange(我认为jQuery确实如此)。或者他们可以覆盖send方法(但这是不可能的)。因此,这是部分解决方案。

因为它不依赖于未更改“ onreadystatechange”回调,而是监视“ readyState”本身。



 类似资料:
  • 问题内容: 好的,所以基本上我想在页面上放一些JavaScript,以某种方式附加某种全局事件侦听器,该侦听器可以在发出ajax请求时检测并执行某些操作(无需直接从调用中调用它),而不管ajax如何打电话了。 我想出了如何使用jquery-如果ajax请求是 由 jquery 完成 的 。这是一个示例代码: 使用此代码,无论我在哪里/如何调用$ .post(..),全局事件监听器都会触发。如果我使

  • 问题内容: 好的,所以基本上我想在页面上放置一些JavaScript,以某种方式附加某种全局事件侦听器,该侦听器可以在发出ajax请求时检测并执行某些操作(而无需从调用中直接调用),而不管ajax如何打电话了。 我想出了如何使用jquery-如果ajax请求是 由 jquery 完成 的 。这是一个示例代码: 使用此代码,无论我在哪里/如何调用$ .post(..),全局事件监听器都会触发。如果我

  • 问题内容: 在我的动作中,我只希望响应从AJAX请求中调用的处理。我该如何检查? 我想做这样的事情: 问题答案: 您可以检查是否为AJAX请求。这是一篇很好的文章。 这是一个例子:

  • 主要内容:Ajax 的工作原理,发送 Ajax 请求,检索响应信息Ajax 全称“Asynchronous JavaScript and XML”,译为“异步 JavaScript 和 XML”,程序员们习惯称之为“阿贾克斯”,它并不是一种技术,而是多种技术的综合体,其中包括 JavaScript、XML、JSON、DOM、CSS、HTML 以及最重要的 XMLHttpRequest 对象。通过 Ajax 可以异步从服务器请求数据并将数据更新到网页中,整个过程不

  • 问题内容: 我想使用jQuery来获取URL,并明确检查它是否响应302重定向,但 不 遵循重定向。 jQuery 似乎总是遵循重定向。如何防止这种情况,并且不遵循重定向就可以看到重定向? 标题有很多问题,例如“ jquery ajax redirect”,但它们似乎都涉及实现其他目标,而不仅仅是直接检查服务器给出的状态。 问题答案: AJAX请求永远不会有机会不遵循重定向(即,它必须遵循重定向)

  • 问题内容: 我正在使用simple_form gem并生成表单,我正在指定remote:true选项,如下所示: 因此,表单的输出html是以下片段: 正如我检查的那样,当使用 remote:true 选项时,使用标准的form_for帮助器将 data-remote =’true’添加 到表单中。从生成的html中可以看到,当我使用simple_form gem时,也有这样的属性。 __ 因此,