2013-09-20 2 views
2

У меня есть следующие функции:Jquery Ajax внутри .each Как вызвать функцию, когда вся .each завершена

$.each(friends, function(friend, data) { 
     var group = "Chat"; 

$.ajax({'type':'GET', 'url':'/site/getgroup?username=' + friend, 
'success':function(callback){ 

group = callback; 
self.addFriend(friend, data.status, group); 

}, //ajax success 
}); //ajax 

      }); 

После этих кодов, у меня есть некоторые коды для инициализации chatBar с использованием данных из них. каждый и .ajax. Однако сейчас, поскольку Ajax является асинхронным, он становится очень глючным. Как я могу узнать, что эти .each все закончили с возвращенным значением ajax без установки ajax async в false? (Означает, что эта часть полностью закончена).

Как есть способ, которым я могу использовать .promise, .complete или XHRs, чтобы знать всю. Вся вещь завершена? Я пробовал много вещей, но они, похоже, не работают для меня.

Спасибо,

+0

Я хотел бы подойти, что по-другому, сделав только один запрос Ajax и Переберите результатов обратного вызова. Хотя это решение может потребовать некоторого рефакторинга 'getgroup'. – Mina

ответ

9

Используйте $.when()

var xhrs = [] 
$.each(friends, function (friend, data) { 
    var group = "Chat"; 
    var xhr = $.ajax({ 
     'type': 'GET', 
     'url': '/site/getgroup?username=' + friend, 
     'success': function (callback) { 
      group = callback; 
      self.addFriend(friend, data.status, group);  
     }, //ajax success 
    }); //ajax 
    xhrs.push(xhr) 
}); 

$.when.apply($, xhrs).done(function(){ 
    //all are complete 
}); 
0

Простое решение должно иметь массив состояния и для каждого AJAX запроса, в случае успеха/обработчик ошибок для обновления & проверить массив состояния, чтобы увидеть, если все остальные запросы ajax завершены. Таким образом, вы также можете сохранить ответ для каждого запроса ajax.

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