2010-11-23 6 views
1

Привет, Я работаю над jQuery each() - loop, содержащим ajax-запрос setTimeout. Это дает мне некоторые проблемы с потоком программы.Выполнение функции после каждого цикла завершено

xml_queries: function (data) { 
    var values = []; 

    // ... 

    $.each(data, function(index, value) { 

     // ... 

     // Start xml query 
     var i = 0; 
     get_data(value.value); 

     function get_data(value) { 
      $.ajax({ 
       type: 'POST', 
       url: '/admin/scanner/get_music_data/' + value, 
       dataTaype: 'json', 
       success: function(response) { 
        if (response === 'FALSE') { 
         // Start recursion - up to 3 Retries 
         if (++i <= 3) { 
          setTimeout(function() { 
           get_data(); 
          }, 100); 
         } else { 
          // ... 
         } 
        } else { 
         values.push(response); 
        } 
       } 
      }); 
     } 
    }); 
    // return values; 
    console.log(values); 
} 

Моя проблема заключается в том, что console.log() в последней строке вызывается немедленно (в то время как цикл продолжается обработка данных). Нет ли легкой возможности дождаться окончания цикла? \:

С уважением!

+0

Это обычный Ajax-это-асинхронная проблема. Есть ** тон ** вопросов о SO об этом в одном или другом аромате. – 2010-11-23 00:57:16

ответ

1

На основе вашего текущего кода самым простым способом было бы установить для параметра $ .ajax async значение false для принудительного синхронного запроса, в результате чего JavaScript дождался его завершения, прежде чем продолжить выполнение последующих операторов (он выиграл это сделать для асинхронных запросов).

$.ajax(
    { 
    type: 'POST', 
    async: false, 
    ... 

Это заблокирует ваш браузер в течение каждого запроса (yuck). Другой способ сделать это было бы переделать приложение таким образом, что следующий вызов Ajax вызывается внутри успеха обратного вызова из первого и т.д .:

$.ajax(
    { 
    type: 'POST', 
    ... 
    success: function() { 
     doAjaxThingie(); 
    } 
+1

Лучше всего было бы объяснить асинхронное поведение, но я истекаю кровью из этих вопросов. – 2010-11-23 00:58:08

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

  • Нет связанных вопросов^_^