Search code examples
javascriptjqueryajaxasynchronouswait

jQuery Wait until async ajax calls are finished


Hi I have 2 ajax calls in my script, I need them run asnyc to spare time, but I need the second to wait until the first is finished.

$.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");
        }
    });
}

So any ideas? Thanks


Solution

  • If using jQuery 1.5+, you can use jQuery.when() to accomplish this. Something like (shortened the ajax calls for brevity, just pass the objects as you're doing above)

    $.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 ]
    });
    

    You don't know in which order they will return so if you were rolling this by hand, you would need to check the state of the other request and wait until it has returned.