好的,基本上我想在一个页面上有一些javascript,它以某种方式附加了某种全局事件侦听器,可以在发出ajax请求时检测并执行某些操作(而不是直接从调用中调用它),而不管ajax调用是如何进行的。
如果ajax请求是由jquery完成的,我想出了如何使用jquery来做到这一点。下面是一个示例代码:
$.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代码):
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对象?
编辑:
我忘了提一下,仅仅检测到请求的发生是不够的。我还需要捕获请求中发送的数据。下面评论中提供的链接将帮助确定是否发出了“请求”,但不会发送数据。附注:-下面的链接中提供的答案不是很清楚,至少对我来说是这样的。
https://stackoverflow.com/questions/3596583
复制相似问题