Как я могу обнаружить «любой» ajax-запрос, выполняемый с помощью jQuery? - PullRequest
13 голосов
/ 26 мая 2010

У меня есть страница, где я могу вставить некоторые javascript / jquery для манипулирования выводом. У меня нет другого контроля над разметкой страницы и т. Д.

Мне нужно добавить дополнительный элемент через jquery после каждого присутствия на странице. Проблема заключается в том, что элементы генерируются с помощью асинхронного вызова на существующей странице, который происходит после завершения $ (document) .ready.

По сути, мне нужен способ вызова jquery после загрузки страницы и завершения последующих вызовов ajax. Есть ли способ обнаружить завершение любого вызова ajax на странице, а затем вызвать мою собственную пользовательскую функцию для вставки дополнительных элементов после вновь созданных s?

Ответы [ 5 ]

46 голосов
/ 26 мая 2010

К сожалению, это не применимо, так как кажется, что OP не использует $.ajax() или любой метод jQuery ajax для фактической загрузки контента, но оставляя его здесь на случай, если будущие гуглеры это сделают.


Вы можете использовать любое из глобальных событий ajax, которое соответствует вашим потребностям, здесь , вы, вероятно, после $.ajaxComplete() или $.ajaxSuccess().

Например:

$(document).ajaxSuccess(function() {
  alert("An individual AJAX call has completed successfully");
});
//or...
$(document).ajaxComplete(function() {
  alert("ALL current AJAX calls have completed");
});

Если вы хотите запустить просто какую-то общую функцию, то присоедините их к документу (они просто события внизу). Если вы хотите показать что-то конкретное, например, модальное сообщение или сообщение, вы можете использовать их немного лучше (хотя, похоже, это не то, что вам нужно), например:

$("#myModal").ajaxComplete(function() {
  $(this).fadeIn().delay(1000).fadeOut();
});
2 голосов
/ 26 мая 2010

Этот пример просто показывает и скрывает элементы в начале и в конце вызовов ajax, используя jQuery:

    $("#contentLoading").ajaxSend(function(r, s) {
        $(this).show();
        $("#ready").hide();
    });

    $("#contentLoading").ajaxStop(function(r, s) {
        $(this).hide();
        $("#ready").show();
    });

#contentLoading - индикатор прогресса изображения GIF.

1 голос
/ 14 мая 2014

Вы можете переписать функцию send () объекта XMLHttpRequest.

Посмотрите решение для этого, используя чистый Javascript здесь .

1 голос
/ 26 мая 2010

Как я понял, вы используете некоторую функцию jQuery Ajax в вашем готовом обработчике. Таким образом, вы можете просто передать ей другую функцию, которая будет вызвана после того, как ваша Ajax-функция получит ответ. Например

$(document).ready(function(){
    $("#some_div").load('/some_url/', function(){
        /* Your code goes here */
    });
});
0 голосов
/ 26 мая 2010

Вы можете использовать .live () / .delegate () .

...