Хорошо, поэтому в основном я хочу иметь немного 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"
}
);
С помощью этого кода, независимо от того, где/как я вызываю $.post(..), запускается глобальный прослушиватель событий. Он также работает, если я использую $.get или $.ajax(любые jQuery ajax-методы), независимо от того, как/когда я его называю (прикрепляется как onclick, на загрузке страницы, что угодно).
Тем не менее, я хочу, чтобы иметь возможность расширять этот прослушиватель, чтобы запускать независимо от того, что используется js-инфраструктура, или даже если никакая фреймворк не используется. Так, например, если бы я был и, на странице был указан следующий код (общий код ajax из 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();
}
И затем у меня есть на какой-то случайной ссылке вызов onclick для этой функции, мой глобальный слушатель событий ajax должен иметь возможность также обнаруживать этот запрос. Ну, я добавил этот код на свою страницу и привязал его к случайной ссылке onclick (да, сам код работает), но код jQuery "global event listener" выше не смог обнаружить этот вызов.
Я сделал еще несколько копаний, и я знаю, что могу в основном сохранить объект в временном объекте и перезаписать текущий объект с помощью объекта "обертка", который вызовет указанную функцию, а затем вызовет временную функцию, но это требует от меня заранее знать оригинальный объект, который создается/используется. Но я не всегда буду знать это раньше времени...
Итак... это возможно? Есть ли способ обнаружить запрос ajax get/post, независимо от того, было ли это сделано с помощью общего объекта или из рамки xyz? Или мне просто нужно сделать дубликат кода для обработки каждой структуры, а также заранее знать, когда создаются/используются объекты ajax?
изменить:
Я забыл упомянуть, что недостаточно обнаружить, что произошел запрос. Мне также необходимо зафиксировать данные, отправляемые в запросе. Ссылка, приведенная в комментариях ниже, поможет выяснить, был ли выполнен запрос "a", но не получить отправленные данные. постскриптум - ответ, указанный в приведенной ниже ссылке, не очень ясен, по крайней мере, мне так или иначе.