Итак, в основном, я хочу иметь немного 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"
}
);
С помощью этого кода, независимо от того, где/как я называю $ .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» выше не смог обнаружить этот вызов.
Я сделал еще немного копания, и я знаю, что могу в основном сохранить объект в временном объекте и перезаписать текущий объект с помощью объекта «обертка», который вызовет указанную функцию, а затем вызовет функцию temp, но для этого требуется заранее знать исходный объект, который создается/используется. Но я не всегда буду знать это раньше времени ...
Итак ... это возможно? Есть ли способ обнаружить запрос ajax get/post, независимо от того, было ли это сделано с помощью общего объекта или из рамки xyz? Или мне просто нужно сделать дубликат кода для обработки каждой фреймворк, а также заранее знать, когда создаются/используются объекты ajax?
редактировать:
Я забыл упомянуть, что это не достаточно, чтобы обнаружить, что запрос произошло. Мне также необходимо зафиксировать данные, отправляемые в запросе. Ссылка, приведенная в комментариях ниже, поможет выяснить, был ли выполнен запрос «a», но не получить отправленные данные. постскриптум - ответ, указанный в приведенной ниже ссылке, не очень ясен, по крайней мере, мне так или иначе.
возможный дубликат [ Выяснение, когда запрос XMLHttpRequest был выполнен без обратных вызовов] (http://stackoverflow.com/questions/2255248/figuring-out-when-a-xmlhttprequest-request-was-made-without-callbacks) –
Спасибо за ссылку! Этот вопрос не совсем такой, потому что мне нужно было также уловить данные, отправляемые в запросе (которые, как я полагаю, я забыл включить, отредактировал). Тем не менее, это привело меня к правильному пути, и я думаю, что нашел решение, опубликую, когда тестирование будет завершено. Благодаря! –
Я думаю, что вы ищете в этом вопросе о том, как манипулировать прототипом, но лучше. Https://stackoverflow.com/q/20689481/3462483 – doz87