首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript检测AJAX事件

JavaScript检测AJAX事件
EN

Stack Overflow用户
提问于 2010-08-30 05:04:40
回答 2查看 73.2K关注 0票数 80

好的,基本上我想在一个页面上有一些javascript,它以某种方式附加了某种全局事件侦听器,可以在发出ajax请求时检测并执行某些操作(而不是直接从调用中调用它),而不管ajax调用是如何进行的。

如果ajax请求是由jquery完成的,我想出了如何使用jquery来做到这一点。下面是一个示例代码:

代码语言:javascript
复制
$.post(
  // requested script
  'someScript.php', 
  // data to send
  {
    'foo' : 'bar',
    'a' : 'b'
  },
  // receive response
  function(response){
    // do something
  }
); // .post

// global event listener    
$(document).ajaxSend(
  function(event,request,settings){
    alert(settings.url); // output: "someScript.php"
    alert(settings.data); // output: "foo=bar&a=b"
  }
);

使用此代码,无论我在哪里/以何种方式调用$.post(..),全局事件侦听器都将触发。如果我使用$.get或$.ajax (任何jquery ajax方法),它也可以工作,无论我如何/何时调用它(作为onclick附加,在页面加载时,等等)。

但是,无论使用什么js框架,或者即使没有使用框架,我都希望能够将此侦听器扩展为触发器。因此,举个例子,如果我要在一个页面上有以下代码(来自w3schools的通用ajax代码):

代码语言:javascript
复制
function loadXMLDoc()
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","test.txt",true);
xmlhttp.send();
}

然后,我在某个随机链接上对该函数进行了onclick调用,我的全局ajax事件侦听器应该能够对此请求进行检测。我将该代码添加到我的页面,并将其附加到一个随机链接的onclick上(是的,代码本身可以工作),但是上面的jquery“全局事件侦听器”代码未能检测到该调用。

我做了更多的挖掘,我知道我基本上可以将对象保存到一个临时对象,并用一个“包装器”对象覆盖当前对象,该对象将调用指定的函数,然后调用临时函数,但这需要我提前知道正在创建/使用的原始对象。但我不会总是提前知道...

So...is这是可能的吗?有没有什么方法可以检测到ajax get/post请求的发出,不管它是通过通用对象还是来自xyz框架完成的?或者我只需要编写重复的代码来处理每个框架,并提前知道正在创建/使用的ajax对象?

编辑:

我忘了提一下,仅仅检测到请求的发生是不够的。我还需要捕获请求中发送的数据。下面评论中提供的链接将帮助确定是否发出了“请求”,但不会发送数据。附注:-下面的链接中提供的答案不是很清楚,至少对我来说是这样的。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3596583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档