Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2011, 08:21
Кандидат Javascript-наук
Отправить личное сообщение для posta Посмотреть профиль Найти все сообщения от posta
 
Регистрация: 27.08.2010
Сообщений: 115

AJAX в порядке очереди
Как сделать, что бы ajax запросы выполнялись в порядке очереди.

Попробывал сделать так:
var ReadyNext=true;

if (ReadyNext) {run(btn,'getTotalCount');}

while (ReadyNext==false) {
	if (ReadyNext) {run(btn,'getList', '......');}
}

								
			
var run = function(){		
	ReadyNext=false;
	Ext.Ajax.request({
		waitMsg: 'Секундочку...',
		url: 'synchro.php',					
		success: function (response){
					var resp=response.responseText;
					ReadyNext=true;
				},
		failure: function (response){								
					var resp=response.responseText;
				},
		params: {							
					request:host,
					cmd:cmd
				}
	});					
}


Но из-за того, что запросы асинхронны, то все идет не подряд, а параллельно.
Кто сталкивался - отпишитесь.

А еще лучше - описать способ прохождения такого списка порядку.

Последний раз редактировалось posta, 23.03.2011 в 08:30.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2011, 10:27
VKS VKS вне форума
Профессор
Отправить личное сообщение для VKS Посмотреть профиль Найти все сообщения от VKS
 
Регистрация: 24.09.2010
Сообщений: 178

function run(btn, host){

var iteration = 0;
	Ext.Ajax.request({
		waitMsg: 'Секундочку...',
		url: 'synchro.php',					
		success: function (response){
					var resp=response.responseText;
					switch (iteration) {case 0: run(...); iteration++; break; ...}

				},
		failure: function (response){								
					var resp=response.responseText;
				},
		params: {							
					request:host,
					cmd:cmd
				}
	});					
}


Выполняйте рекурсивно запрос в блоке success
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2011, 10:30
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

Логика простая: учитывая, что тебе нужно по порядку, то тебе асинхронность не нужна, а значит отсылай запросы синхронно.
Но учитывая, что Ext.Ajax.request синхронно не умеет...используй стандартный XMLHttpRequest

Последний раз редактировалось Добрый слоник, 23.03.2011 в 10:32.
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2011, 10:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Добрый слоник
Логика простая: учитывая, что тебе нужно по порядку, то тебе асинхронность не нужна, а значит отсылай запросы синхронно.
Отличная логика: отправляй много запросов синхронно и повесь наглухо браузер.
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2011, 10:47
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

поясни?
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2011, 10:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Что пояснить? Что пока обрабатывается синхронный запрос, браузер ни на что не реагирует? Так это из названия понятно. Синхронный -- т.е. все сидят и ждут, когда он завершится.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2011, 12:35
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

Kolyaj
В целом - холивар...я сейчас выскажу свою точку зрения, ты, если посчитаешь нужным свою....но до усрачки спорить не будем, ок?

1. Существуют задачи когда действительно нужно отправлять много запросов в фоновом режиме и от этого будет польза, например:
Проверка личных сообщений на сайте знакомств - с какой-то периодичностью, но не раньше чем получен предыдущий ответ отправляешь запрос, а в это время пользователь любуется фотками будущей подруги жизни.... - нужна асинхронность, не стоит омрачать столь приятный момент в жизни пользователя

Но есть другие задачи, например:
1. подгрузка списков в select'ы, отправка формы, "показать детали" и пр. когда при любом раскладе пока не догрузится пользователю, по сути нифига не сделать, а только смотреть на надпись "секундочку", "минуточку", "идет загрузка", "подождите".
Так елки, покажи надпись "Подождите..." загрузи синхронно, покажи "Ура дождались"

В данном варианте я вижу 2 вещи:
1." Секундочку" - с такими надписями фоновые проверки не делаются
2. автор не может отправить запрос пока не получил ответ от предыдущего.

Моя позиция - грузи синхронно - логика проще, а толку столько же.
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2011, 12:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Добрый слоник
В целом - холивар...
Холивар -- это когда обсуждаются равноценные вещи.

Сообщение от Добрый слоник
1. Существуют задачи когда действительно нужно отправлять много запросов в фоновом режиме и от этого будет польза,
Непонятно, к чему сказано.

Сообщение от Добрый слоник
когда при любом раскладе пока не догрузится пользователю, по сути нифига не сделать
Почему нифига? Я могу захотеть просто закрыть сайт, если данные долго не грузятся. В случае синхронного запроса я могу только убить процесс браузера.

Сообщение от Добрый слоник
Моя позиция - грузи синхронно - логика проще
К сожалению это стандартная позиция многих разработчиков -- сделай себе проще, а пользователю хуже.
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2011, 16:13
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

Цитата:
Непонятно, к чему сказано.
Построение ответа было такое (все по личному мнению)
1. Где нужна асинхронность (примеры)
2. Где не нужна (примеры)
3. Выводы
Цитата:
Я могу захотеть просто закрыть сайт
не остра проблема...не остра....чтоб уж голова о ней болела...
1. Потому, что на медленных соединениях вообще крайне не приятно работать
2. Проблема есть только в IE 6 - а он медленно и верно умирает
3. Объемы "Войны и мира" передаются крайне редко
Цитата:
сделай себе проще, а пользователю хуже.
некорректно....есть некая разница между простым решением и халтурным. Я за простые решения
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2011, 17:02
Кандидат Javascript-наук
Отправить личное сообщение для posta Посмотреть профиль Найти все сообщения от posta
 
Регистрация: 27.08.2010
Сообщений: 115

Сообщение от VKS Посмотреть сообщение
function run(btn, host){

var iteration = 0;
	Ext.Ajax.request({
		waitMsg: 'Секундочку...',
		url: 'synchro.php',					
		success: function (response){
					var resp=response.responseText;
					switch (iteration) {case 0: run(...); iteration++; break; ...}

				},
		failure: function (response){								
					var resp=response.responseText;
				},
		params: {							
					request:host,
					cmd:cmd
				}
	});					
}


Выполняйте рекурсивно запрос в блоке success

Решил с помощью Коллбеков. Если надо напишу. без итераций.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05
Скрипт ajax чата seoabcd Общие вопросы Javascript 2 20.02.2011 18:39
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12