Реклама на сайте Advertise with us

Ajax и сложные серверные запросы

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 05.06.09
Сообщения: 6

Ссылка на сообщениеДобавлено: 11/07/09 в 11:50       Ответить с цитатойцитата 

Люди добрые, поможите кто знает ajax.
Каким образом обеспечить непрерывную подгрузку данных с сервера по ajax, пока серверный скрипт продолжает работать?
Когда скрипт прекратил работать - тут нет проблем.
Код:

req = new XMLHttpRequest();
req.onreadystatechange = Req;
function Req() { 
    if (req.readyState == 4) {
var text=req.responseText;
document.getElementById('div').innerHTML=text;
}}


Дело в том, что функция Req активизируется только тогда, когда
req.readyState == 4 (completed)
т.е когда скрипт на сервере прекратил работать. До этого момента в браузере ничего не происходит.
Это нужно к примеру при проверке списка прокси-серверов. Пока серверный скрипт не отработает весь список, в броузере ничего не происходит и только потом начинается выгрузка в броузер.
Как сделать, чтобы видеть данные в процессе работы скрипта?
(Серверный скрипт написан на perl, хотя клиентскому java-скрипту думаю по-барабану что там работает на сервере)

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 11/07/09 в 12:18       Ответить с цитатойцитата 

аякс не при чем, меняйте тот скрипт, который данные выдает. Пускай буфер сразу скидывает, а не держит.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



С нами с 05.06.09
Сообщения: 6

Ссылка на сообщениеДобавлено: 11/07/09 в 12:31       Ответить с цитатойцитата 


Все это я перепробывал. Серверный скрипт конечно же ничего не копит в буфере, а сразу выводит в выходной поток. При этом с клиентском скрипте нужно заменить 4 на 3
if (req.readyState == 3) { }
В этом случае firefox худо-бедно выводит промежуточне результаты, да и то, когда сам пожелает, а IE на 3 не реагирует, и ждет исключительно comleted (4).
При этом очевидно, что решение существует. К примеру на каком-нибудь хостерском сайте при проверке домена на сервере тоже работает тяжелый скрипт, однако в браузер (в любой) они успешно выводят промежуточные результаты.

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 11/07/09 в 13:08       Ответить с цитатойцитата 

Ты аяксом хочешь запросить скрипт и сразу выводить то, что он выводит скажем в течении минут 10 ? Может легче тогда запрашивать маленькие кусочки и их через document.write дописывать.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 

Мотиватор :)

С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607

Ссылка на сообщениеДобавлено: 11/07/09 в 14:56       Ответить с цитатойцитата 

Разбей весь список на кусочки, например так:
Код:
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div>
<div id="div5"></div>

<script type="text/javascript">
function ajaxLoad(n)
{
    var req = new JsHttpRequest();
    req.onreadystatechange = function()
    {
        if (req.readyState == 4)
        {
            document.getElementById('div'+n).innerHTML = req.responseText;
        }
    }
    req.open('GET', 'ajax_load_data.php', true);
    req.send( { 'n': n } );
}

// вызываем эту хрень
for (var i=0; i<5; i++)
{
    ajaxLoad(i);
}
</script>


у меня подобное используется в админке одного из проектов. а можно сделать и последовательный вывод через setTimeout().

Just a signature.

2
 



С нами с 05.12.99
Сообщения: 342
Рейтинг: 323

Ссылка на сообщениеДобавлено: 11/07/09 в 16:10       Ответить с цитатойцитата 

iframe используй

0
 

Мотиватор :)

С нами с 06.05.09
Сообщения: 3028
Рейтинг: 607

Ссылка на сообщениеДобавлено: 11/07/09 в 16:20       Ответить с цитатойцитата 

Cook писал:

iframe используй


некрасиво и непрофессионально

Just a signature.

0
 



С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987

Ссылка на сообщениеДобавлено: 11/07/09 в 17:18       Ответить с цитатойцитата 

Prizma писал:
Каким образом обеспечить непрерывную подгрузку данных с сервера по ajax, пока серверный скрипт продолжает работать?
Если нет возможности разбить работу серверного скрипта на маленькие кусочки, то можно сделать что бы он скидывал свои результаты работы во временный файлы, а уже через ajax получать эти результаты.
В твоем примере, где самым продолжительным этапом будет запрос на прокси и ожидание от него ответа, можно сделать что результат проверки скидывается в файл в формате:
0-0
1-0
2-1
где первый столбик это нормер урла в списке, а второй это результат проверки: 0-прокси не рабочий, 1- рабочий.
Естественно получить такой файл это несколько секунд. Делаешь его запрос раз в 30 секунд и полученные результаты выводишь.
Конечно можно поизгаляться с удалением проверенных данных и тд и тп, но тут главное не переборщить, а то ФФ жрущий 1,5 гб оперативки и 60% процесорных ресурсов немного напрягает icon_smile.gif

3
 



С нами с 27.03.09
Сообщения: 155
Рейтинг: 320

Ссылка на сообщениеДобавлено: 12/07/09 в 18:43       Ответить с цитатойцитата 

слегка не в тему конечно - тс уходи от написания аяксовых элементов вручную и переходи на нормальные фреймворки благо их достаточно - тот же jQ

программист. набираю отзывы и заказы. | блог Вордпресскина

0
 



С нами с 05.06.09
Сообщения: 6

Ссылка на сообщениеДобавлено: 12/07/09 в 18:52       Ответить с цитатойцитата 

В общем, решил проблему. Спасибо всем за советы, а особенно Cibtor++
- надоумил.
Одновременно запускаем на сервере два скрипта.
Один (рабочий) решает основную задачу и результаты сбрасывает в файл.
Второй (считывающий) скрипт просто считывает этот файл с заданным интервалом и выводит его в браузер по ajax.
Цикл считывания заканчивается, когда в тексте файла обнаруживается некое "конечное" слово (***END***).
Вот здесь рабочий макет http://group2002.h18.ru/ajax_2.htm Там же приведены простейшие тексты клиентского и серверного скрипта (perl).

0
 



С нами с 15.03.08
Сообщения: 33
Рейтинг: 96

Ссылка на сообщениеДобавлено: 14/07/09 в 14:12       Ответить с цитатойцитата 

Несколько поздновато icon_smile.gif но хочу предложить топикстартеру посмотреть на Ajax Push - это примерно то что требовалось. Довольно подробное описание и пример реализации можно почитать вот здесь, в комментариях есть интересные мысли о том как это реализуется без применения APE.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »