Okay, im Grunde möchte ich ein bisschen Javascript auf einer Seite haben, die irgendwie eine Art globalen Ereignis-Listener anfügt, der etwas erkennen und tun kann, wenn eine Ajax-Anfrage gestellt wird (ohne sie direkt vom Aufruf aus aufzurufen), unabhängig davon, wie der Ajax ist Anruf wird getätigt.
Ich habe herausgefunden, wie man das mit jquery macht - wenn die Ajax-Anfrage von jquery gemacht wird. Hier ist ein Beispielcode dafür:
$.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"
}
);
Mit diesem Code wird unabhängig davon, wo / wie ich $ .post (..) aufrufe, der globale Ereignis-Listener ausgelöst. Es funktioniert auch, wenn ich $ .get oder $ .ajax (beliebige jquery ajax-Methoden) verwende, unabhängig davon, wie / wann ich es aufrufe (als Onclick angehängt, beim Laden der Seite, was auch immer).
Ich möchte diesen Listener jedoch erweitern können, um ihn auszulösen, unabhängig davon, welches js-Framework verwendet wird oder auch wenn kein Framework verwendet wird. Wenn ich zum Beispiel auch auf einer Seite den folgenden Code haben würde (generischer Ajax-Code von w3schools):
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();
}
Und dann habe ich über einen zufälligen Link einen On-Click-Aufruf dieser Funktion. Mein globaler Ajax-Ereignis-Listener sollte in der Lage sein, diese Anforderung ebenfalls zu erkennen. Nun, ich habe diesen Code zu meiner Seite hinzugefügt und ihn an den Klick eines zufälligen Links angehängt (ja, der Code selbst funktioniert), aber der obige jquery-Code "Global Event Listener" konnte diesen Aufruf nicht erkennen.
Ich habe noch etwas gegraben und weiß, dass ich das Objekt im Grunde genommen in einem temporären Objekt speichern und das aktuelle Objekt mit einem "Wrapper" -Objekt überschreiben kann, das eine bestimmte Funktion aufruft und dann die temporäre Funktion aufruft, aber dies erfordert, dass ich es vorher weiß Zeit, zu der das ursprüngliche Objekt erstellt / verwendet wird. Aber das werde ich nicht immer im Voraus wissen ...
Also ... ist das möglich? Gibt es eine Möglichkeit zu erkennen, dass eine Ajax-Get / Post-Anfrage gestellt wurde, unabhängig davon, ob sie mit einem generischen Objekt oder aus einem xyz-Framework durchgeführt wurde? Oder muss ich nur doppelten Code erstellen, um jedes Framework zu handhaben, und im Voraus wissen, welche Ajax-Objekte erstellt / verwendet werden?
bearbeiten:
Ich habe vergessen zu erwähnen, dass es nicht ausreicht, zu erkennen, dass eine Anfrage aufgetreten ist. Ich muss auch die Daten erfassen, die in der Anfrage gesendet werden. Über den in den Kommentaren unten angegebenen Link können Sie herausfinden, ob eine "Anfrage" gestellt wurde, die Daten jedoch nicht gesendet werden. ps - die Antwort im Link unten ist nicht sehr klar, zumindest für mich.