Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax (XMLHttpRequest) в цикле 
:(
    Опции темы
neokortex
Дата 28.1.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



XMLHttpRequest не работает в цикле. Точнее работает не полностью. Выполняется только один (первый) раз и все.

Код

if (r[j].checked == true) { 
            var url = "move.php?kakoi=" + r[j].value + "&kuda=" + id; 
                request_remove.open("GET", url, true); 
            request_remove.send(null); 
            };


Помогите пожалуйста решить проблему
PM MAIL   Вверх
12345c
Дата 28.1.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 6
Всего: 101



request_remove - это так объект называется?

Нужно, конечно, через столько объектов отправлять, сколько шагов цикла, а тут объект 1.
Но всё равно, параллельно работать будут не более 2, остальные будут ждать очереди.

Или через 1 объект, но сделайте запрос синхронным.



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
IDVsbruck
Дата 29.1.2010, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



Ну, 2 - это, как говорит источник - "в некоторых браузерах" ... а может и больше.

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

Это сообщение отредактировал(а) IDVsbruck - 29.1.2010, 00:53
PM MAIL   Вверх
neokortex
Дата 29.1.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



да мне и не нужно одновременно, а по очереди.
ВОТ ЭТОТ КОД РАБОЧИЙ
Код

 for (var r = document.getElementsByName('remove_checkbox'), j = 0, l = r.length; j < l; j++) { 

            if (r[j].checked == true) { 

                var request_remove = false; 
                try { 
                    request_remove = new XMLHttpRequest(); 
                }  
                catch (trymicrosoft) { 
                    try { 
                        request_remove = new ActiveXObject("Msxml2.XMLHTTP"); 
                    }  
                    catch (othermicrosoft) { 
                        try { 
                            request_remove = new ActiveXObject("Microsoft.XMLHTTP"); 
                        }  
                        catch (failed) { 
                            request_remove = false; 
                        } 
                    } 
                } 
                if (!request_remove)  
                    alert("Error initializing XMLHttpRequest!"); 

                var url = "move.php?kakoi=" + r[j].value + "&kuda=" + id;                 
                request_remove.open("GET", url, true); 
                response_remove = request_remove.responseText; 

                request_remove.onreadystatechange = function(){ 
                    if (request.readyState == 4) { 
                        document.getElementById("script_results").innerHTML = '<br />=' + response_remove + document.getElementById("script_results").innerHTML + ''; // соединяем старые результаты с новыми (формирование отчета "на лету") 
                    }; 
                            }; 

                request_remove.send(null); 
            }; 
            };


GET запросы происходят. А вот ответ не приходит... Формирования отчета нет :( Как можно решить проблему?
PM MAIL   Вверх
IDVsbruck
Дата 30.1.2010, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



Вот твой код, только немного упорядочен, а то читать нельзя:
Код

for (var r = document.getElementsByName('remove_checkbox'), j = 0, l = r.length; j < l; j++) { 
    if (r[j].checked == true) { 
        var request_remove = ... //получаем объект XMLHttpRequest
        var url = "move.php?kakoi=" + r[j].value + "&kuda=" + id;                 
        request_remove.open("GET", url, true); 
        response_remove = request_remove.responseText; //что это за переменная и откуда берется responseText если запрос еще не послан?
        request_remove.onreadystatechange = function(){ 
            if (request.readyState == 4) { 
                document.getElementById("script_results").innerHTML = '<br />=' + response_remove + document.getElementById("script_results").innerHTML + '';
            }; 
        }; 
        request_remove.send(null); 
    }; 
};

и он совершенно недееспособный, не говоря уже про "рабочий".

Подкорректируем:
Код

var request_remove = ... //получаем XMLHttpRequest и он должен быть глобальным
for (var r = document.getElementsByName("remove_checkbox"), j = 0, el; el = r[j]; j++) { 
    if (el.checked) { 
        var url = "move.php?kakoi=" + el.value + "&kuda=" + id;                 
        request_remove.open("GET", url, true); 
        request_remove.onreadystatechange = function(){ 
            if (request_remove.readyState == 4) { 
                response_remove = request_remove.responseText;
                document.getElementById("script_results").innerHTML = "<br/>=" + response_remove + document.getElementById("script_results").innerHTML;
            };
        }; 
        request_remove.send(null); 
    }; 
};

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.