好吧,所以基本上我想在頁面上有一點JavaScript,以某種方式附加某種全局事件偵聽器,可以檢測並做一些事情,如果發出ajax請求(無需直接從調用),而不管ajax調用如何進行。JavaScript檢測到一個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"
}
);
有了這個代碼,無論在哪裏/我如何調用$。員額(..),全球事件偵聽器將觸發。如果我使用$ .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調用該函數,我全球阿賈克斯事件監聽器應該能夠也檢測到這個請求。那麼我將這段代碼添加到我的頁面,並將它附加到隨機鏈接的onclick(是的,代碼本身工作),但上面的jquery「全局事件偵聽器」代碼未能檢測到該調用。
我做了一些更多的挖掘,我知道我基本上可以將對象保存到臨時對象,並用一個「包裝器」對象覆蓋當前對象,該對象將調用指定的函數,然後調用臨時函數,但這需要我提前知道正在創建/使用的原始對象。但我不會總是知道,提前...
所以......這是可能的嗎?是否有某種方法可以檢測出ajax get/post請求,而不管它是用通用對象還是用xyz框架完成的?或者我只是需要重複代碼來處理每個框架,並且還要提前知道正在創建/使用的ajax對象?
編輯:
我忘了提,這是不夠的,檢測發生的請求。我還需要捕獲請求中發送的數據。以下評論中提供的鏈接將有助於弄清楚是否提出了「一個」請求,但不能獲得發送的數據。附: - 下面的鏈接提供的答案不是很清楚,至少對我來說無論如何。
可能重複[搞清楚何時XMLHttpRequest請求沒有回調](http://stackoverflow.com/questions/2255248/figuring-out-when-a-xmlhttprequest-request-was-made-without-callbacks) – 2010-08-29 21:32:25
感謝您的鏈接!這個問題並不完全如此,因爲我需要也能夠捕獲請求中發送的數據(我想我忽略包含它;編輯)。但是,它使我走上了正確的軌道,我想我找到了一個解決方案,將在測試完成後發佈。謝謝! – 2010-08-30 00:30:08
我認爲你正在尋找的是關於操縱原型的問題,但以更好的方式https://stackoverflow.com/q/20689481/3462483 – doz87 2017-07-20 15:11:03