@EvgMul

Как правильно организовать асинхронный цикл ajax запросов?

Здравствуйте. У меня следующая проблема. Требуется запустить цикл, который N раз будет вызывает ajax запрос, который каждый раз будет возвращать данные, которые в свою очередь нужно выводить на экране(некое подобие прогресс бара).
На данный момент есть вот такой код:
function parsing(newParse, numberOfObjects, currentObject) {
	var counter = 0;
	$('.control-buttons').addClass('hidden');
	while (numberOfObjects > currentObject) {

		$.ajax({
			url: 'parsing.php',
			success: function(data) {
				$('#read-objects').text(currentObject);
			}
		});
		counter++;
		currentObject++;
	}
}

Сейчас он просто грузит страницу и весь браузер. Я понимаю, что код в корне неверен, но ввиду своей неопытности не могу понять как решить проблему.
Подскажите пожалуйста, каким образом нужно переписать код, чтобы цикл работал так, как нужно?
Заранее благодарен всем отозвавшимся.
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
@vshvydky
furnction runAjax(){
return $.ajax({
      url: 'parsing.php',
      success: function(data) {
        $('#read-objects').text(currentObject);
        counter++;
        currentObject++;
        setTimeout(runAjaxt, timeIntervalMS);
      }
    });
}

Одно но, цикл загнется при ошибочном ответе аякса, можно добавить условия по каунтеру, когда он перестанет циклиться, так же надо посмотреть какие методы надо подключить для обработки ошибочного поста и поведении в это ситуации. А вообще в аяксе сейчас есть нечто типа финали, кода, который выполняется при любом раскладе.

ЗЫ:
Можно и без ретурна, runAjax лишь обертка для удобного ее вызова через сет таймаут
ЗЫ2:
complete - как раз то финальное действие, так же добавьте себе помимо саксеса обязательно эррор, негоже игнорировать ошибки, они съедятся вникуда иначе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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