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
}
});
}
Но из-за того, что запросы асинхронны, то все идет не подряд, а параллельно. Кто сталкивался - отпишитесь. А еще лучше - описать способ прохождения такого списка порядку. |
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 |
Логика простая: учитывая, что тебе нужно по порядку, то тебе асинхронность не нужна, а значит отсылай запросы синхронно.
Но учитывая, что Ext.Ajax.request синхронно не умеет...используй стандартный XMLHttpRequest :) |
Цитата:
|
поясни? :)
|
Что пояснить? Что пока обрабатывается синхронный запрос, браузер ни на что не реагирует? Так это из названия понятно. Синхронный -- т.е. все сидят и ждут, когда он завершится.
|
Kolyaj
В целом - холивар...я сейчас выскажу свою точку зрения, ты, если посчитаешь нужным свою....но до усрачки спорить не будем, ок? 1. Существуют задачи когда действительно нужно отправлять много запросов в фоновом режиме и от этого будет польза, например: Проверка личных сообщений на сайте знакомств - с какой-то периодичностью, но не раньше чем получен предыдущий ответ отправляешь запрос, а в это время пользователь любуется фотками будущей подруги жизни.... - нужна асинхронность, не стоит омрачать столь приятный момент в жизни пользователя :) Но есть другие задачи, например: 1. подгрузка списков в select'ы, отправка формы, "показать детали" и пр. когда при любом раскладе пока не догрузится пользователю, по сути нифига не сделать, а только смотреть на надпись "секундочку", "минуточку", "идет загрузка", "подождите". Так елки, покажи надпись "Подождите..." загрузи синхронно, покажи "Ура дождались" :) В данном варианте я вижу 2 вещи: 1." Секундочку" - с такими надписями фоновые проверки не делаются 2. автор не может отправить запрос пока не получил ответ от предыдущего. Моя позиция - грузи синхронно - логика проще, а толку столько же. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
1. Где нужна асинхронность (примеры) 2. Где не нужна (примеры) 3. Выводы Цитата:
1. Потому, что на медленных соединениях вообще крайне не приятно работать 2. Проблема есть только в IE 6 - а он медленно и верно умирает 3. Объемы "Войны и мира" передаются крайне редко :) Цитата:
|
Цитата:
Решил с помощью Коллбеков. Если надо напишу. без итераций. |
Цитата:
|
Не факт, можно отдельным потоком сделать
|
Напиши, если сделал
Будь любезен.
|
Цитата:
словами, не обязательно кодом. |
Спасибо за тему!
Только вот всё равно никак не могу разобраться, скажите пожалуйста, что не так?
function ajax() {
var statusElem = document.getElementById('table');
var i = 2;
function recurs(i) {
Elem = statusElem.rows[i];
var add_site = Elem.getAttribute('id')
Elem.innerHTML = '<td align="center" colspan="10"><img src="data/img/ajax.gif" width="32" height="32" /></td>'
$.ajax({
dataType: "text",
timeout: 3000,
cache: false,
type: "POST",
url: "index.php",
data: 'mode=chk_one&site='+add_site,
success: function(msg){Elem.innerHTML = msg;
if (i<statusElem.rows.length) {recurs(i++);}
}
})
}
}
|
| Часовой пояс GMT +3, время: 06:22. |