Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2017, 17:12
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Почему в цикле дело не доходит до обработки результата, а вне его наоборот?
Здравствуйте!

Я попробовал запускать такой код, который в цикле добывает данные из компонента Joomla:
while (go == 1){
		jQuery.getJSON('index.php?option=com_vm3delpics&task=fsdelete.read&format=json'
		, {
			data: {
				... //отправляемые данные
			}
		})
		.done(function(r) {
			...
			go = r.data.go;//здесь меняется условие продолжение цикла на основании данных полученных от компонента
			...	
		})
		.fail(function() {
			...
		})
		.always(function() {
                        ...
		});
	}

но в отладке увидел, что сразу после вызова jQuery.getJSON() происходит переход на следующую итерацию цикла while, дело до анализа результатов(до тела функции done) не доходит.
Хотя если я уберу обёртку цикла(строки "while (go == 1){" и "}") и вызову jQuery.getJSON() единожды, то отладчик сначала перескочит через функции done(), fail(),always(), что-то повычисляет в jquery.min.js и только потом вспоминает, что есть эти функции и выполняет их код.
Возникли вопросы:
1. Как можно объяснить, почему без цикла отладчик добирается в тело done(), а в цикле while нет?
2. И как можно сделать цикличный код рабочим?

Последний раз редактировалось borus, 06.09.2017 в 17:17.
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2017, 17:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,807

Цикл неправильно написан.
Если в начало цикла затолкать это строку:
console.log('Cycle');

А в метод always это:
console.log('Always');


То можно увидеть, что в консоль фразы "cycle" и "always" будут выводиться не по очереди, а хаотично.
Это будет происходить потому, что while не дожидается завершения запроса, а начинает следующий цикл немедленно после выполнения кода своего тела.
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2017, 17:31
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Спасибо.

Как же тогда организовать цикл запросов?
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2017, 17:32
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,807

borus,https://javascript.ru/forum/ajax/699...tml#post460515
Ответить с цитированием
  #5 (permalink)  
Старый 06.09.2017, 17:38
Аватар для borus
Кандидат Javascript-наук
Отправить личное сообщение для borus Посмотреть профиль Найти все сообщения от borus
 
Регистрация: 07.12.2012
Сообщений: 147

Простите, тогда я вас не понял почему-то ...

Последний раз редактировалось borus, 06.09.2017 в 17:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск