@carbonate

JQuery как добится окончания всех запросов ajax в цикле?

function dm()
{
var result = '';
j.post('/x',function(r){
		     j('table tr',r).each(function(){
			    var url   = j(this).find('a').attr('href');
			    j.get(url,function(e){
				       result = result+j('#block',e).text();
				});				
		     });
                     //alert(result);
		     return result;
});
}

В результате я получаю пустой ответ, т.к. запросы все еще идут и цикл двигается.
Как же получить полный ответ? после того как запросы/цикл закончится
  • Вопрос задан
  • 983 просмотра
Решения вопроса 1
RubaXa
@RubaXa
carbonate а что вы ожидаете? У вас код асинхронный, а результат вы пытаетесь синхронно получить. Как выше уже неоднократно написали, нужно использовать `$.Deferred`, единственно, что добавлю это `$.when` + `then` и код станет завершенным:

function doIt(url) {
  return $.post(url).then(function (res) {
    var result = '';

    var queue = $('table tr', res).map(function () {
      var url = $(this).find('a').prop('href');

      return $.get(url, function (res) {
        result += $('#block', res).text();
      });				
    });

    return $.when.apply($, queue).then(function () {
      return result; 
    });
  });
}

// Используем
doIt('/x').then(function (result) {
  alert(result); 
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы