uaf0x
@uaf0x
Всего понемногу

Как запустить ajax после исполнения других запросов?

Собственно можно кидаться тапками, я толкьо начал изучение этой всей темы.
Есть скрипт который собирает данные, и в конце он должен отправить массив данных в файл, но у меня почему-то скрипт исполняется раньше чем нужно. Юзал ajaxStop у меня тогда скрипт обрабатывается в бесконечном цикле. Как быть ?)

Собственно сам скрипт:
jQuery(document).ready(function() {
	groups = new Array();
	jQuery('.showback').hide();
	jQuery('.getPeople').on('click', function(event) {
		event.preventDefault();
		var data = jQuery('.parceForm').serialize(); 
		jQuery.ajax({
			url: ajaxurl,
			type: 'POST',			
			data: data,
			success:function(data)
			{
				jQuery('.showback').show();
				countMass = JSON.parse(data);
				var progress = 100/countMass['key'];
				var addProgress = 100/countMass['key'];
				var k = 0;
				for (var i = 0; i < countMass['key']; i++) {
					jQuery.ajax({
						url: membersurl,
						type: 'POST',
						data: {q:countMass[0][i]},
						complete:function(data)
						{
							jQuery('.progress-bar').width(progress+"%");
							progress += addProgress;
							groups[k] = data;
							k++;
						}

					});		

				};
				
			},
			complete:function(){
			jQuery.ajax({
				url: userurl,
				type: 'POST',
				data: {'tt': groups}
			});
			}

		});

	});
});

Этот скрипт должен исполнятся 1 раз после выполнения всех ajax запросов.
jQuery.ajax({
				url: userurl,
				type: 'POST',
				data: {'tt': groups}
			});
  • Вопрос задан
  • 1154 просмотра
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Вообще, конечно, не стоит циклом слать на один и тот же адрес данные порознь — достаточно в цикле их собрать и послать один запрос.
Но уж если так приспичило, то стоит сделать примерно так:
Краткий пример

$(function () {
	$('.showback').hide();
	$(document).on('click', '.getPeople', function (e) {
		e.preventDefault();
		$.ajax({
			url: ajaxurl,
			type: 'POST',			
			data: $('.parceForm').serialize(),
			dataType: 'json'
		})
		.done(function (countMass) {
			$('.showback').show();

			for (var i = j = 0, queue = [], groups = [], progress = 100 / countMass.key; i < countMass.key; i++) {
				send(i);
			}

			function send (count) {
				queue.push($.ajax({
					url: membersurl,
					type: 'POST',
					data: {
						q: countMass[0][count]
					}
				}).done(function (data) {
					j++;
					$('.progress-bar').width(progress * j + '%');
					groups[count] = data;
				}));
			}

			$.when.apply($, queue).then(function () {
				$.ajax({
					url: userurl,
					type: 'POST',
					data: {
						tt: groups
					}
				});
			});
		});
	});
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
У ajax-а есть событие success, которое срабатывет при успешном ответе, к нему прицепите Ваш запрос
$.ajax({
                      url: 'cheto.php',
                      data: 'id=' + id + '&next=' + next,
                      success: function(){
//вот тут еще один ajax, который выполнится после ответа об успехе от этого
}
                      
					
				});
Ответ написан
Stalker_RED
@Stalker_RED
jQuery(document).ready(function() {
  groups = new Array();
  jQuery('.showback').hide();
  jQuery('.getPeople').on('click', function(event) {
    event.preventDefault();
    var data = jQuery('.parceForm').serialize(); 
    jQuery.ajax({
      url: ajaxurl,
      type: 'POST',			
      data: data,
      success:function(data)
      {
        jQuery('.showback').show();
        countMass = JSON.parse(data);
        var progress = 100/countMass['key'];
        var addProgress = 100/countMass['key'];
        var k = 0;
        var wtf = countMass['key'] - 1 // я ничего не сломал?
        for (var i = 0; i <= wtf; i++) {
          jQuery.ajax({
            url: membersurl,
            type: 'POST',
            data: {q:countMass[0][i]},
            complete:function(data)
            {
              jQuery('.progress-bar').width(progress+"%");
              progress += addProgress;
              groups[k] = data;
              k++;
                // ALL MAGIC HERE
                if(i == wtf) { // сработает только после последнего запроса
                   jQuery.ajax({
                     url: userurl,
                     type: 'POST',
                     data: {'tt': groups}
                   });
                }
            }

          });		

        };
        
      }
    });

  });
});


А вообще запросы в цикле - не очень хороший ход. Всё сразу забрать никак нельзя?
Ответ написан
Ваш ответ на вопрос

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

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