2013-09-05 3 views
0

У меня есть функция javascript. Внутри этой функции у меня есть 3 вызова ajax. Как я могу убедиться, что моя другая функция выполняется после того, как эти аякс-вызовы завершены?Как убедиться, что моя функция выполняется после всех вызовов ajax?

function a(){ 
    for(var i=0;i<3;i++) 
     $.post("somePage.php").done(function(){ 
      do stuff here... 
     }); 
    return false; 
} 
function b(){ 
    //..... 
} 

будет ли моя функция b выполнять после того, как сделанные ajax звонки?

+1

нет .... как всегда, как b называется –

+0

Возможный дубликат [Подождите, пока не будет выполнен все запрос jQuery ajax?] (Http://stackoverflow.com/questions/3709597/wait-until-all-jquery- ajax-request-are-done) – Itay

ответ

1

Написать проверку инкремент Инкремент на каждой возвращенной Ajax, как показано ниже:

increments = 0; 
$.post("somePage.php").done(function(){ 
    // Check if the increments are total to 3 
    ++increments; 
    if(increments == 3) { 
    //do something now such as call b(); 
    } 
    //do stuff here... 
}); 
3

полное решение будет что-то вроде

function a() { 
    var array = [], xhr; 
    for (var i = 0; i < 3; i++) { 
     xhr = $.post("somePage.php").done(function() {}); 
     array.push(xhr) 
    } 
    //create a promise which will be called after all the ajax request are completed 
    return $.when.apply($, array); 
} 

function b() { 
    //..... 
} 

//on succss callback of all the ajax requests created in a call b 
a().done(b) 
+0

Только потенциальная проблема, в зависимости от того, как эта функция вызывается, заключается в том, что она использовала для возврата false, а теперь нет. –

+0

спасибо, что это очень хорошее решение !!! –

0

ajaxStop метод JQuery позволяет зарегистрировать обработчик быть когда все запросы Ajax завершены.

Смежные вопросы