Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как в цикле for переходить к следующей итерации после завершения предыдущей? (https://javascript.ru/forum/jquery/49115-kak-v-cikle-perekhodit-k-sleduyushhejj-iteracii-posle-zaversheniya-predydushhejj.html)

FRIE 29.07.2014 22:07

Как в цикле for переходить к следующей итерации после завершения предыдущей?
 
Есть такой скрипт у меня, который подгружает карточки. Подгружает такое число карточек которое указано на кнопке.
Затея в том чтобы он подгружал их по очереди, сначала полностью одну, затем вторую полностью и так далее.

Но как я вижу он тупо быстро проходит цикл и делает столько запросов на загрузку сколько итераций указано в цикле.

Как бы сделать так чтобы следующая загрузка начиналась только после того как закончится предыдущая?

$('.getbutton').click(function() {
				ob=$(this);
				$(ob).css("background-color","#ccc"); 
				quantity=$(this).attr("title");
				for (var i = 0; i <= quantity; i++) { 
					$.post("scripts/getcontent.php", {quantity:1}, function(data) {
					$("#main").append(data);
					});
				}
				  $(ob).stop().animate({ backgroundColor: "#2979ec"}, 2400);
		});

WorM32 30.07.2014 09:21

http://api.jquery.com/jquery.when/

FRIE 30.07.2014 14:03

Как то не понятно как это будет выглядеть в коде. Есть ещё варианты?

tsigel 30.07.2014 14:08

Есть)
Напишите функцию которая будет выполнять запрос, вне её должен быть счетчик. Счетчик увеличивать с каждым ответом. Если счетчик меньше чем нужно в ответе функция вызывает саму себя (называется рекурсия).

tsigel 30.07.2014 14:09

Получается что следующий запрос будет после ответа.

FRIE 30.07.2014 19:03

Проблему решил.

Для тех кто столкнётся с такой же проблемой вот моё решение.

$('.getbutton').click(function() {
				b=$(this);
				$(b).css("background-color","#ccc"); 
				quantity=$(this).attr("title");
				function ajaxwithi(i){
					$.ajax({
						url: 'scripts/getcontent.php',
						type: 'POST',
						data: 'quantity=1',
						success: function(data) {
							$("#main").append(data);
							if (i < quantity) {ajaxwithi(i + 1);}
						}
					});
				}
				ajaxwithi(1);
				$(b).stop().animate({ backgroundColor: "#2979ec"}, 2400);
		});


Часовой пояс GMT +3, время: 14:27.