2009-03-21 2 views
1

две функции должны быть выполнены в Javascript, вторая - только после того, как первый закончен.выполнить функцию по завершении другого, использовать ajaxComplete()?

Первый заполняет массив с помощью getJSON, а затем второй манипулирует им.

Однако getJSON является асинхронным, поэтому он не приостанавливает порядок выполнения, чтобы программа работала должным образом, чтобы массив завершил загрузку до выполнения второй функции. Как использовать JQuery ajaxComplete() или обратный вызов getJSON, чтобы просто запустить вторую функцию после завершения загрузки данных через getJSON.

Спасибо.


вот код:

function fetch_ids(user) 
var url = 'http://test.com/ids/' + escape(user) + '.json?callback=?'; 
// populate array ids[] with JSON data --uid[] array declared globally 
$.getJSON(url, function(data) { 
for(var i = 0; i < data.length; i++) ids[i] = data[i]; 
}); 
// test array and run alert 
for(i=0;i<uid.length;i++){ 
for(j=0;j<ids.length;j++){ 
if(uid[i]==ids[j]) 
{alert('matched: ' + uid[i]);} 
} 
} 
// finish test 
} 

ответ

4

Wouldn't эта работа?

$.getJSON(url, params, function (jsonData){ 
    // populate array 
    // call 2nd function. 
}); 

В худшем случае, если у вас есть 2 funcions уже определены в другом месте:

$.getJSON(url, params, function (jsonData){ 
    firstFunction(jsonData); 
    secondFunction(jsonData); 
}); 
+0

Нет, к сожалению, это не работает. Речь идет о запуске второй функции после завершения выполнения $ .getJSON. – Adrian33

+0

Я не понимаю ... что не так, если запустить второй вызов в качестве последней строки обратного вызова getJSON? Почему вам нужно дождаться завершения обратного вызова? – Seb

+0

Если вам нужно заполнить массив, сделайте это при первом вызове или в обратном вызове getJSON; после этого вам не нужно ждать, пока он закончится; вы можете вызвать вторую функцию прямо там. Если нет, то, пожалуйста, обновите свой вопрос, указав, почему это так. – Seb

0

Проверить этот пост похож ... How to initiate another jQuery .ajax call based on the result from an initial .ajax call?

Хитрость заключается в том, чтобы перевести второй вызов в функция успеха первого вызова.

+0

Ну, это похоже на то, что я сказал выше ... но я до сих пор не понимаю, почему ему не понравился мой ответ :( – Seb

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