2013-05-15 2 views
0

У меня есть набор функций для запуска, в последовательности, но первый имеет асинхронную подфункцию. Я хочу, чтобы вторая функция самого высокого уровня запускалась только после завершения функции async. Любая идея, как я это делаю?jquery - сделайте что-нибудь после того, как все сделано -

Файл A:

one(); 
two(); // I don't want this to run until after one()'s $.ajax success callback 

function one() { 
    doSomethingElse(); 
    $.ajax(url, {data: data}, function(){ 
     // do two(); 
    }); 
} 
+5

Почему вы просто не вызываете два() в методе 'success' $ .ajax? –

+0

вы также можете добавить 'async: false' к вашему вызову ajax, если вы не хотите, чтобы он выполнялся асинхронно. – jmiraglia

ответ

1

Изменение ваша функция возвращает объект AJAX:

function one() { 
    doSomethingElse(); 

    return $.ajax({ 
     url: url, 
     data: data 
    }); 
} 

А теперь вы:

one().done(function() { 
    two(); 
}); 

Это немного чище, чем положить two() непосредственно в функцию обратного вызова.

+0

Или, с дополнительными преимуществами, 'one(). Done (two);'. –

0
function one() { 
    doSomethingElse(); 
    $.ajax(url, {data: data}, function(){ 
     // do two(); 
     two(); 
    }); 
} 

function two(){ 
alert("here"); 
}