Заставить ajax подождать, пока каждый с get не закончится

У меня есть цикл jquery .each с.get внутри. Я хочу подождать, пока все попадания внутри цикла не будут завершены (каждый получает толчки в.complete новый элемент в массив), а затем сделать ajax post запрос в файл php, чтобы сохранить созданный массив. Я не знаю, как заставить запрос ajax ждать, пока каждый из них не будет завершен. До сих пор ajax срабатывает очень быстро, и поэтому массив все еще пуст, так как входы внутри каждого из них еще не завершены, когда он запускается. Может быть, у вас есть идея.

Вот сценарий:

$('#ScanButton, .ScanButton').click(function() {

var array = ["http://www.xyz.com/bla/bla/summary.html",
             "http://www.xyz.com/blu/blu/summary.html",
            ];

dataArray = [];

$.each(array, function(n, val) { 


    $.get(val, function(res) { //get the html source of this website



      var data = {

      }

  }).complete(function() { 
        alert("complete"); 
        dataArray.push(data);
    });

});

    data = YAHOO.lang.JSON.stringify(dataArray);      

  $.ajax({
    async:           false,
    type:           'post',
    cache:          false,
    url:            'test.php',
    data:           {myJson:  data}
    });

  return false;

});

Я ценю любую помощь. Спасибо:)

1 ответ

Underscore.js имеет элегантное решение этой проблемы.

var renderNotes = _.after(notes.length, render);
_.each(notes, function(note) {
  note.asyncSave({success: renderNotes}); 
});
// renderNotes is run once, after all notes have saved.
Другие вопросы по тегам