Как я могу определить "любой" запрос ajax, который выполняется с помощью jQuery?

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

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

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

Ответы

Ответ 1

К сожалению, это не применяется, поскольку, по-видимому, 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

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

$(document).ready(function(){
    $("#some_div").load('/some_url/', function(){
        /* Your code goes here */
    });
});

Ответ 3

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

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

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

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

Ответ 4

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

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