Подтвердить что ты не робот

JQuery Подождите, пока вызовы async ajax не будут завершены

Привет. У меня есть 2 вызова ajax в моем script, мне нужно, чтобы они запускали asnyc для свободного времени, но мне нужно, чтобы второй дождался завершения первого.

$.ajax({
        type: "POST",
        url: "getText.asmx/ws_getText",
        data: parO1,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            alert(msg.d.data);
        }
        , error: function () {
            chyba("chyba v požadavku", "df");
        }
    });
    if (parO2.length > 0) {
        $.ajax({
            type: "POST",
            url: "getText.asmx/ws_getText",
            data: parO2,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                /*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/
            }
        , error: function () {
            chyba("chyba v požadavku", "df");
        }
        });

Итак, какие-нибудь идеи? Благодаря

4b9b3361

Ответ 1

Если вы используете jQuery 1.5+, вы можете использовать jQuery.when(), чтобы выполнить это. Что-то вроде (сокращенный ajax требует краткости, просто передайте объекты, как вы делаете выше)

$.when($.ajax("getText.asmx/ws_getText"), 
       $.ajax("getText.asmx/ws_getText")).done(function(a1,  a2){

   // a1 and a2 are arguments resolved for the 
   // first and second ajax requests, respectively
   var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ]
});

Вы не знаете, в каком порядке они будут возвращаться, поэтому, если вы перематываете это вручную, вам нужно будет проверить состояние другого запроса и подождать, пока он не вернется.

Ответ 2

Вам нужно подключить второй вызов, который будет содержаться в обратном вызове вашего первого вызова ajax. Например:

success: function(msg)
{
    alert(msg.d.data);

    if(par02.length > 0)
    {
        // Your 2nd ajax call
    }
},

Так как JavaScript не работает в нескольких потоках на клиенте, вы не можете блокировать поток до тех пор, пока не будут выполнены определенные условия.

Ответ 3

Использование jquery

$.ajax({
        type: "POST",
        async:false, // ** CHANGED **
        url: "getText.asmx/ws_getText",
        data: parO1,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            alert(msg.d.data);
        }
        , error: function () {
            chyba("chyba v požadavku", "df");
        }
    });

Ответ 4

Вот еще один ответ на выполнение двойных запросов ajax. Как и Tejs, пользователь делает вызов ajax в рамках метода успеха...

В плакате говорится, что вам лучше, если метод успеха запускает новый запрос ajax.. "

Имея два вызова $.ajax() в одном script