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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсивный ajax 
:(
    Опции темы
Sniper
Дата 28.3.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хочется чтобы было так:
Код

function log_answer (req){
        if (req.responseText == "not_complete")
              ajax('login_repost.php','GET',null,log_answer); // тут надо сделать как-то задержку, чтобы запросы посылались раз в 2 секунды, например.
        else
        {
              alert ("логин обработан");
        }
}

ajax('login.php', 'GET', null, log_answer);


т.е.

1. вызываем login.php
2. если скрипт выдал результат "not_complete" вызываем второй скрипт login_repost.php
3. если скрипт login_repost.php тоже вернул"not_complete" , то мы его так и проболжаем выполнять пока он не вернёт нормальный ответ (попадёт в else и сработает alert ("логин отбработан");)

только AJAX не успевает обрабатывать такое количество "посылок" и выдаёт окошко с заголовками и прочей служебной информацией.

Пробовал сделать задержку setTimeout и setInterval, но функция 
Код

ajax('login_repost.php','GET',null,log_answer);
 
выполняется один раз почему-то и всё.

p.s фреймфорки не предлагать - не нужны мне.


Это сообщение отредактировал(а) Sniper - 28.3.2010, 22:24


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
bars80080
Дата 28.3.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(Sniper @  28.3.2010,  22:15 Найти цитируемый пост)
Пробовал сделать задержку setTimeout и setInterval,

как?

и почему такая система? что там такого делает login_repost.php ?
PM MAIL WWW   Вверх
IDVsbruck
Дата 28.3.2010, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sniper @  28.3.2010,  22:15 Найти цитируемый пост)
только AJAX не успевает обрабатывать такое количество "посылок" и выдаёт окошко с заголовками и прочей служебной информацией

С чего бы это? - Интересно взглянуть на функцию ajax().
PM MAIL   Вверх
gcc
Дата 28.3.2010, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



можно использовать push server

http://javascript.ru/ajax/comet/overview и http://habrahabr.ru/blogs/webdev/41223/ 
у себя в блоге написал http://www.x0.org.ua/blog/user/1/view/7
PM WWW ICQ Skype GTalk Jabber   Вверх
Sniper
Дата 29.3.2010, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(IDVsbruck @  28.3.2010,  20:00 Найти цитируемый пост)
Интересно взглянуть на функцию ajax(). 

Код

function on_ready_state(req, onload) {
  if (req.readyState==4) {
    if (req.status==200 || req.status==0) {
      onload(req);
    } else {
      error(req);
    }
  }
}
function ajax(url,method,params,onload) {
  var req;
  if (window.XMLHttpRequest) {
    req=new XMLHttpRequest();
  } else if (typeof ActiveXObject != undefined) {
    req=new ActiveXObject("Microsoft.XMLHTTP");
  } else req = new ActiveXObject("Msxml2.XMLHTTP");
  if (req) {
    try {
      if (onload) {
        req.onreadystatechange=function() { on_ready_state(req, onload) };
      }
      req.open(method,url,true);
      req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
      req.send(params);
    } catch (err) {
      error(req);
    }
  }
}


Добавлено @ 07:19
Цитата(bars80080 @  28.3.2010,  19:29 Найти цитируемый пост)
как? 

Код

function log_answer (req){
        if (req.responseText == "not_complete")
              setTimeout("ajax('login_repost.php','GET',null,log_answer)",2000); //как то так
        else
        {
              alert ("логин обработан");
        }
}
ajax('login.php', 'GET', null, log_answer);


Цитата

и почему такая система? что там такого делает login_repost.php ?

кадый скрипт посылает свою команду другому компьютеру через один единственный сокет.

Это сообщение отредактировал(а) Sniper - 29.3.2010, 07:20


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
IDVsbruck
Дата 29.3.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Очень советую вынести переменную req в глобальную область и не передавать в функциях, а использовать глобально, а то замыкание на замыкании - ни к чему хорошему не приведет.
Кроме этого, один раз определив ее, не надо тратить ресурсы на ее определение каждый раз.
Идея, предложенная qcc, неплоха, но ее реализация слишком сложна для простой задачи, да и средствами javascript+html - костыль на костыле, несмотря на ссылки и все, что там описано. Тут, возможно, можно задуматься еще над одной реализацией псевдо-server-push - Continuations: отсылаем запрос на сервер, сервер создает отдельный thread и "держит" там респонс до появления события и отдает клиенту при его наступлении или по таймауту (скажем, 10-20 сек.) Ресурсов это ест немного, правда, нужна только многопоточная среда на сервере (не знаю, справляется ли с этим ПэХаПэ до 5-ой версии) и не требует сложной реализации на клиенте.
PM MAIL   Вверх
Sniper
Дата 29.3.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хотелсь бы всётаки не переписывать в который раз реализацию этого всего, а доработать текущую!


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
bars80080
Дата 29.3.2010, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(Sniper @  29.3.2010,  07:17 Найти цитируемый пост)
              setTimeout("ajax('login_repost.php','GET',null,log_answer)",2000); //как то так

можно попробовать ещё так:

Код

setTimeout(function() { ajax('login_repost.php', 'GET', null, log_answer) } ,2000); 


PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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