![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
korob2001 подскажи плиз такую вещь:
мой чат пишет в файл сообщения, а потом файл выводится. Скрипт обновляется заданное кол-во секунд указанное в <meta>, и выводит файл с сообщениями. Таким образом страница постоянно передёргивается, но хуже того то, что анимированные картинки длинной анимации также передёргиваются на половине и начинаются сначала!!! Посмотрев другие чаты, никакого обновления страницы я в них не нашёл. Сообщения в них спокойно вставляются, и соответсвенно картинки спокойно работают по своему циклу. По крайней мере как это сделано, при помощи чего? JavaScript? Кликнув по свойствам фрейма вывода тех чатов работает вывод идёт из .cgi --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Ты хочешь выводить контент без перезагрузки страницы?
Если да, то тебе помогут XMLHttpRequest и ActiveXObject из JavaScript. Посмотри вот эту тему. Как-то писал я бегущую строку, которая основана на XMLHttpRequest и ActiveXObject. Если я не верно понял тебя, поясни задачу подробнее. ЗЫ: А почему вопрос задаёшь индивидуально, мне? Здесь же есть и другие участники, которые знакомы с Perl не хуже меня. Это сообщение отредактировал(а) korob2001 - 19.12.2006, 21:41 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Materium |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Спросил именно тебя так, из уважения. больше не буду ))) точнее лично писать )))
В общим ссылку я посмотрел, но там вроде немного не то что мне нужно. Или то, но в сложном для меня контексте. Сейчас я выделю упрощённый код со своего скрипта и всё будет прозрачнее:: Итак, есть набор фремов .cgi, создаваемых некоторым .cgi Один такой фрейм как обычно - текстовая область. другой .cgi фрейм получает напечатанный текст, пишет это в файл, а в конце скрипта формируется <html> и файл выводится. В полной упрощёнке так выглядит:: Пишем полученный текст в файл::
В тексте есть команда, к примеру *1, которая заменяется на <IMG> картинку. Всё это пишется в file.dat Далее, в конце скрипта, формируется html:: # Вывод чата
Если сообщение из фрейма не поступило, следовательно идёт вывод в заданное кол сек. Всё прекрасно работает. Вопрос в том, как всё организовать, весь вывод без <META http-equiv="refresh" content="8">? Как юзеры будут получать сообщения из file.dat без обновления скриптового фрейма? Тогда фрейм не будет "передёргиваться", и картинки будут отрабатывать весь свой анимационный цикл. А так после 8 сек они начинаются, соответственно, сначала. Какой JavaScript нужно вставить в этот сценарий .cgi, чтобы всё было "статично", а сообщения выводились в конец, при этом фрейму не нужно было бы пробегать весь скролл сверха до низу??? Спасибо за внимание Это сообщение отредактировал(а) Materium - 20.12.2006, 19:49 --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
||||
|
|||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 12 Всего: 84 |
||||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Я уже написал, что тебе нужно. Если разберёшься, то твой фрейм не только не будет передёргиваться, он вообще не будет перезагружаться. Попробуй с этим вопросом обратиться в раздел JS, поищи там темы по ключевым словам, которые я указал и выделил выше.
Спасибо. PS: У меня сейчас проблемы с временем, запускаю проект в сеть. ;(((((( Если не разберёшься до выходных, попробую пояснить подробнее. Это сообщение отредактировал(а) korob2001 - 20.12.2006, 10:49 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Уважаемые, я понимаю что мне придётся изучить более-менее JavaScript, без него видно плохо совсем. Пойду я на форум JS и что? Мне же не голый JS интересует, а именно, самое главное, как этот чёртов JS связать с Perl в моём случае, приведённом выше. Попробую конечно )))
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Проэкт запустил, так что сынишку спать положу и попробую написать.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
korob2001 если б у меня уже было 100 постов я бы те поднял репутацию, несколько задач я уже научился решать с твоей помощью.
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Привет!
Вобщем написал небольшой пример, простейшего чата которому не нужна перезагрузка для вывода сообщений. 1. В каталоге /www создадим каталог chat, т.е. должен получиться такой путь /www/chat. 2. Этот код сохрани в каталог, который создал на первом шаге, в файле request.js
3. Теперь в каталоге /cgi-bin создай каталог ch, в итоге должен получиться путь /cgi-bin/ch 4. В каталоге, который был создан на третьем шаге, создай пустой текстовый файл base.txt 5. Этот код помести в тот же каталог, где расположил пустой файл base.txt на шаге 4, в файле с именем chrequest.pl
С этим кодом будет работать JavaScript Теперь в тот же /cgi-bin/ch сохрани следующий код, в файле с именем chat.pl
Теперь запусти браузер и введи адрес http://localhost/cgi-bin/ch/chat.pl. Вводи строки в поле формы и жми кнопку OK. PS: Чуть позже я прокоментирую весь код, сейчас должен отлучиться. PSS: Это простейший пример, потому он без блокировок файлов, без обработок ошибок и прочего. Вобщем тебе ещё самому придётся над всем этим поработать. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Спасибо Короб я начну его анализировать и потом сообщу что и как у меня получилось!
Сам Чат у меня готов со всеми делами, блокировками, обработками, аутентификацией и администрированием. Самый большой ступор был с сессиями, на которые ты меня сподвиг и которые я освоил, и теперь вот осталось вывод нормальный, так как это JavaScript в котором я вообще пока и ни туды, и ни сюды ))) пошёл заниматься кодом... ))) --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| Materium |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Итак, Короб2001, ))) тема становится горячее. Я напряг отсутствие своего мозга, и модифицировал свой код выше на основе твоего кода::
Вот так:
модифицировал chrequest.pl, запихав его в cgi-bin/chat
ИТАК, в путь, сейчас перечислю плюсы и минусы (странно что у меня вообще всё заработало ))) ):: +-ы - только один 1)Всё стало конечно приятнее, пропало передёргивание страницы!!! - -ы к сожалению их много 1)Наш с тобой код, точнее твой код, када я его запустил, када пишешь по русски - печатает на выходе ???? знаки вопроса. И ладно бы ещё знаки вопроса, попадаются обрывки разных тэгов, из-за чего у меня в чате например, вылеВзши что-то типа ??? ??ont> соответственно полетел видимо тэг <font>, так как цвета текстовые сразу изменились в чате. )))))) Это раз. 2)Скорость ужасно упала, проходит пара секунд с тех пор, когда отправляешь мессагу и потом видишь её на экране, при этом при отправке экран очищается и заполняется. Ну это может мелочи, согласен, издержки конструкций и т.д.. Всё бы ничего, но, третий минус - 3)Анимационный период картинок попрежнему сразу же начинается при релоаде страницы. (во всех чатах сообщения валят а картинки играют своё) Как я понял в яве таймаут установлен в 5 сек, то есть и анимация gif срезается и начинается вновь с каждым релоадом. 4)Почему-то теперь перестал работать мой скроллинг вниз!!! Он торчит всегда посередине теперь!!! Куда вставить код скроллинга, чтобы он торчал внизу??? Код
Уважаемый Короб2001, если вы поможете хотя бы по пунктам 1) и 4) я буду счастлив. --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
||||||
|
|||||||
| Materium |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Короб2001 проблема №1 решена заменой
на
То есть
Это сообщение отредактировал(а) Materium - 21.12.2006, 23:03 --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
||||||
|
|||||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
2 и 3) Задержка в JavaScript стоит 5 секунд, т.е. он конектится к серверу каждые 5 секунд.
Попробуй измени значение на 500. Текст будет появляться примерно в 10 раз быстрее, но в тоже время картинки будут обновляться тоже в 10 рыстрее. Избавиться от этого, означает отказаться от того, что бы старые сообщения удалялись, а соответственно и размер страницы будет расти.
На такую:
Здесь мы не обновляем контент, а добавляем к нему. Но теперь у нас будут повторяться сообщения и страница будет расти с неимоверной скоростью. Единственный выход, это использовать такую анимацию в чаете, что бы её скорость была >= скорости обновления, либо вообще не анимированные, что на мой взгляд ещё лучше. Можно конечно написать апплет Java и сделать на его основе чат, это с одной сторы усложнит задачу, но зато и результат будет на лицо. Только не путай Java, с JavaScript, это абсолютно разные языки. 4. Думаю проблема в этой строке:
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Спасибо я ща пойду попробую поменять в JS. Дело в том что у меня стоит файл счётчик, который обновляет base.txt каждые 50 записей в него, поэтому мне сразу пришло сейчас в глову что
то что мне и нужно! ))) пойду проверю. --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Нет, это не то, что тебе нужно. Это я тебе для примера привёл. Возьми для примера работу с файлом. Что ты делаешь, что бы очистить файл от старых записей? Правельно, сначала читаешь файл, затем по каким-то критериям отсеиваешь старые записи, затем открываешь файл для записи, тем самым очищая его и заносишь в него не отсеяную информацию.
Примерно тоже самое происходит и с HTML документом. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
УУУ нет не то это что я подумал, плодаятся как тараканы. В общем меня усё устраивает, я тоже реверс взял с твоего кода массива и вывожу сообщения наверх. Скролинг так и не работает. во фрейме моём у меня scrolling="auto" всегда стояло. Пробовал функцию скрола запихать в request JS и PL. 0 эффект.
Всё равно спасибо за код ))) --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |