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

Сообщение от Alexandroppolus
Цикл while (go) будет выполняться, пока go != 0. Обнулить её могут не ранее, чем в след. витке событийного цикла. А он не наступит, пока не закончится цикл while (go)
Почему не наступит? Ведь это цикл и может сложиться ситуация, по крайней мере я стремлюсь, чтобы она происходила, когда исполнение зайдет в код:
if(r.data.folder == ''){
	go = 0;
}
описанный в рамках функции done()

Сообщение от Alexandroppolus
Стандартное решение - убрать цикл, каждую след. итерацию (запрос) запускать в done, строка 36
Что-то типа такого
jQuery(document).ready(function (){
...		
jQuery.getJSON('index.php?option=com_vm3delpics&task=fsdelete.read&format=json', {
			data: {
				"time_limit":time_limit,
				"from":from,
				"read_cnt":read_cnt 
			}
		})
		.done(function(r) {
			if (!r.success && r.message){
				alert(r.message);
			}
			if (r.messages){
				Joomla.renderMessages(r.messages);
			}
			if (r.data){
				debugger;
				if(r.data.stop_inc == 0 ){
					read_cnt = r.data.read_cnt*2;
				}
                                else{
                                    read_cnt = r.data.read_cnt;
                                }
				$from = r.data.from;
				if(r.data.folder != ''){
					jQuery.getJSON('index.php?option=com_vm3delpics&task=fsdelete.read&format=json', {
			                     data: {
                        				"time_limit":time_limit,
                           				"from":from,
                               				"read_cnt":read_cnt 
			                     }
                         		})

				}
			}
		})
		.fail(function() {
			alert('Ошибка Ajax запроса!');
		})
		.always(function() {
			alert('Ajax запрос завершен');
		});
});

?
Задача в цикличном считывании данных с сервера, пока не закончатся, порциями. Как тогда туда вместить новую обработку ответа с помощью функции done? Писать такие вложенные jQuery.getJSON().done().fail().always() до бесконечности?.. Ведь не будет происходить перезагрузка страницы, и вся обработка в первой done() не будет выполняться...

Попробовал тот же код запустить, просто убрав обрамление while, увидел по крайней мере ответ функций fail и always. Что же с ответом от сервера не так? Выходит php не смотря на исполняемую строку echo new JResponseJson($result); не посылает ответ? Или может ответ посылается/ловится на туда или не там?

Последний раз редактировалось borus, 03.08.2017 в 14:00.
Ответить с цитированием