2013-06-11 2 views
2

У меня есть код, как это:JQuery цикл, ждать функции, чтобы завершить

for(var hour = -1; hour > -24; hour--) 
    $.getJSON(url + hour, function(data) { 
     //... 
    }); 
} 

мне нужно использовать переменную час в моей функции getJSON. Но сначала он проходит цикл for. Это час = -1, -2, -3 ... и т. Д.

Тогда, наконец, это $ .getJSON (url + -24). Я хочу, чтобы он был $ .getJSON (url + -1), -2 и т. Д. И использовал эту переменную все еще внутри функции.

+0

Это фактически делает каждый вызов, но он делает это асинхронно. Вы, по-видимому, хотите, чтобы обработка выполнялась синхронно, что указывает на то, что Javascript/AJAX может быть не лучшим решением вашей проблемы. – keithhatfield

ответ

3

Я хотел бы использовать рекурсивную функцию обратного вызова, как

function recurseJSON(hour) { 
    if (hour < -24){ 
     return; 
    } 
    $.getJSON(url + hour, function (data) { 
     //... 
     recurseJSON(hour-1); 
    }); 
} 
2

Проблема заключается в том, что метод $ .getJSON асинхронный. Ваш код не ждет, пока цикл for не завершится, чтобы вызвать вызовы $ .getJSON; вместо этого ваш код продолжает проходить вызов до его завершения.

способ исправить это изменение вызова $ .getJSON к $ .ajax вызову, как это:

$.ajax(
    url:url + hour, 
    async:false, 
    dataType:'json', 
    success:function(data) { 
     //... 
    } 
}); 

$ .ajax позволяет добавлять async:false в там, чтобы сделать синхронный Аякс вызова.

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