好的,基本上我想在一个页面上有一个 javascript,它以某种方式附加了某种全局事件监听器,它可以检测和执行 Ajax 请求(不直接从调用中调用它) ,而不管 Ajax 调用是如何进行的。
我弄明白了如何用 jquery 做到这一点——如果 Ajax 请求正在执行 作者 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"
}
);
使用这段代码,不管我在何处/如何调用 $。邮寄(。.)全局事件侦听器将触发。如果我使用 $,它也可以工作。得到或 $。Ajax (任何 jquery ajax 方法) ,不管我如何/何时调用它(作为 onclick 附加,在页面加载时,等等)。
但是,我希望能够扩展这个侦听器来触发,而不管使用的是什么 js 框架,或者即使没有使用任何框架。例如,如果我在 还有页面上有以下代码(来自 w3school 的通用 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“ global event listen”代码未能检测到这个调用。
我做了一些深入的研究,我知道我基本上可以把对象保存到一个临时对象,然后用一个“包装器”对象覆盖当前对象,这个对象将调用一个指定的函数,然后调用临时函数,但是这需要我提前知道原始对象被创建/使用。但我不会总是提前知道。
那么... 这可能吗?是否有某种方法来检测 Ajax get/post 请求是否已经发出,而不管它是使用通用对象还是从 xyz 框架发出的?或者我只需要重复编写代码来处理每个框架,并提前知道正在创建/使用的 ajax 对象?
编辑:
我忘了提到,仅仅检测到发生了请求是不够的。我还需要捕获在请求中发送的数据。下面的评论中提供的链接将帮助确定是否发出了“ a”请求,但是没有发送数据。附注-以下连结所提供的答案并不十分清楚,至少对我来说是这样。