Использование $ .when для ожидания завершения ajax

0

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

Сначала я попытался дождаться, когда первый закончит использование $.ajaxComplete() которое столкнулось с бесконечным циклом из-за второго запроса ajax, выполненного после этого.

Я нашел несколько примеров об использовании $.when но ни один из них не показал, можно ли использовать метод вместо отложенных.

Вот что я хотел бы сделать:

$.when( functionFirstAjaxCall(data) ).then( function() {
    // after first ajax request has finished, do the following:
    $.ajax({
        //...
    });
});

У functionFirstAjaxCall() должно быть определенное возвращаемое значение или как я могу заставить это работать? Кстати, решение не нужно использовать $.when.

Обновление: я получил его работу, создав пользовательское событие, как сообщил Vandesh.

function first() {
    $.ajax({
        // ...
        success: function (d) {
            $.event.trigger({
                type: "finished",
                data: d
            });
         }
    });
}

$(document).on('finished', second());

Во всяком случае, было бы простое решение, используя $.when?

  • 0
    создать функцию со вторым AJAX и запустить ее success:function(){...} или done: из первого AJAX?
  • 0
    Начиная с версии JQuery 1.8 success считается устаревшим - api.jquery.com/jQuery.ajax
Теги:
.when

2 ответа

2
Лучший ответ

Да мы можем! Дозировать что-то подобное этой работе для вас?

function first() {
    var a = $.ajax({
        // ...
    });
    return a.promise();
}

first().done(function(){
    //Im done
});
1

Вы можете сделать что-то вроде:

$.ajax({// First AJAX call
    url: ""
}).done(function() {
    $.ajax({//Second AJAX call on completion of first
        url: ""
    }).done(function() {

    });
});

Подробнее об использовании $.ajax()

  • 0
    Нет, первый Ajax запускается чаще. Два не идут рука об руку. Вот почему я упаковал это в функцию. Я не могу сделать functionFirstAjaxCall().done(function(){ ... }); могу я?
  • 2
    Вы можете попробовать это, используя события jQuery - .bind () и .trigger () api.jquery.com/category/events. Напишите ваше пользовательское событие, которое будет срабатывать по завершении вашей функции, и привяжите второй вызов AJAX к этому событию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню