| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > XMLHttpRequest |
| Автор: Opik 1.6.2005, 18:19 |
| вот пишу чат, понравилась эта технология, вот только немного не пойму как её присобачить Непонятки именно с обновлением чата. Т.е пользователь пишет мессаку, ждем ок, доюбавляется мессага, и сразу же делается вывод своей + новые. а как сделать автообновление? Обновлять невидимый фрейм? Зачем тогда XMLHttpRequest? Объясните кто нибудь технологию чата с использованием XMLHttpRequest? |
| Автор: Sardar 1.6.2005, 19:13 |
| Через XMLHttpRequest(или любой другой компонент) ты постоянно опрашиваешь сервер за новыми мессагами. Отправляя инфу(пост, сообщение) ты по прежнему опрашиваешь сервер о новых мессагах. Получив инфу DOM'ом вставляем её в окно чата. Где конкретно не ясно? |
| Автор: Opik 1.6.2005, 19:35 | ||
| Sardar Автообновление. Раньше оно делалось в невидимом фрейме.
где его опрашивать!? |
| Автор: Sardar 1.6.2005, 19:42 | ||
Угу, а теперь представь что это же автообновление делаеться XMLHttpRequest. Вызывая send, ты опрашиваешь сервер передавая ему параметры GET'ом или POST'ом, в идеали в результате приходит валидный XML, хотя не обязательно. Делаешь запрос( смотри в любом примере, хотя бы в топиках ниже, много раз показывалось), получаешь инфу. Эту инфу показываешь юзеру, попутно форматируя как тебе нравиться. Если пришёл валидный XML, то вообще красота, юзай XPath для выборки того что тебе нужно. Чую тебе не ясен сам механизм... Посмотри эту софтинку: http://forum.vingrad.ru/index.php?showtopic=53606 Кстати JSInteractiveRequest работать будет и под старыми браузерами. |
| Автор: Opik 1.6.2005, 22:04 |
| Sardar Читал. Ты меня немного не понимаешь. Смотри, мне нужно автообновление, так? так. Значит нужно что бы всё таки что то обновлялось. Что? XMLHttpRequest я хочу прикрутить в тот фрейм, где строка ввода. Но не буду же я обновлять этот фрейм всегда. Я не пойму как сделать автообновление. |
| Автор: Black 1.6.2005, 22:19 | ||||||
| Opr Вот код из моего чата:
CodeScript - в эту переменную возвращай код скрипта, т.е. как обычно код который допишет при помощи DOM новую строку в чат Добавлено @ 22:22 Opr
ну XMLHttpRequest - это и есть технология которая ничего не обновляет.. ты вероятно ее немного не понял.. все делает эта строка:
которая сама обновляет все через 6 сек причем refresh.php - это есть путь к скрипту который должен отдавать новые сообщения XMLHttpRequest - посылает скрытые GET или POST запросы без обновления страницы и может получить ответ в ту страницу из которой оно было вызвано. Вообще-то классная технология, все мои скрипты на ней работают |
| Автор: Sardar 1.6.2005, 22:46 | ||
Дык ты по интервалу в скунд 5-10 обращаешся к серверу через XMLHttpRequest. Этот обьект обращаеться к серверу, фрейм не перезагружаеться и вообще фрейм не нужен, ну разве как элемент дизайна Смотрим код PHP-DIRECTOR, видим как он каждые 6 секунд опрашивает сервер, загружая некий исходник и кидая его на eval. Я бы конечно не советовал передавать исходник JS, что мешает отослать нормальный валидный XML? По XML'у на клиенте генерим мессагу с разметкой и показываем юзеру. Короче механизм такой: фреймы в стороне, они не нужны. Обьект XMLHTtpRequest может делать запросы к серверу(для того он и создавался) и может подгружать вывод сервера. Вывод ты можешь получить и заюзать как угодно. Посылать инфу можно как и в формах GET'ом или POST'ом. Добавлено @ 22:47 Упс, PHP-DIRECTOR уже залил второй пост |
| Автор: Black 1.6.2005, 22:54 | ||
| Sardar а мне кажется что отдавать скрипт выгоднее... это меньше места занимает в Кб. Например на странице где расположен XMLHttpRequest есть функция которая добавляет мессаги, и мы ее запускаем через eval(). Т.е.
А в eval() отдавать нечто вроде: mess['','',''] - массив новых сообщений login['','',''] - массив логинов NewMess(mess,login) - запускаем функцию для добавления новых месаг в чат. Вообщем, так мой чат работает Не жалуюсь. Траффик минимальный. |
| Автор: Sardar 1.6.2005, 23:12 | ||
[флейм]
Угу, но это есть большой "не хорошо" Я бы отдавал просто массив с инфой, который попробовал бы распарсить... Люблю парсинг [/флейм] |
| Автор: Opik 1.6.2005, 23:31 | ||
Мне нужно было только :
Добавлено @ 23:31 ТОлько теперь другой вопрос, в чем собственно выигрыш в скорости!? |
| Автор: Sardar 1.6.2005, 23:46 |
| Не отдаём бродилке рендерить всю получаемую лажу как при загрузке всей страницы. И кстати кто сказал что будет быстрее в скорости? |
| Автор: Opik 2.6.2005, 00:47 | ||
| Sardar http://mysitez.km.ua/Programming/?jshttpsend тут внизу
в том же фрейме можно "выводить" только нужную инфу |
| Автор: Sardar 2.6.2005, 01:06 | ||||
Одно и тоже переписываемое почти слово в слово. Новых, не надуманных примеров народ не выкладывает. Допишу свой JSInteractiveRequest, вовзьмусь за общую клиентскую сторону чата(не обещаю в ближайшем будущем).
От это я и пытался втереть Похоже единственное что еще не удаёться через XMLHttpRequest это отсылка файлов, вряд ли это будет когда либо имплементированно по сображениям безопасности. |
| Автор: Black 2.6.2005, 01:28 | ||||
Opr
ну не обязательно именно в том фрейме где запускаем XMLHttpRequest через JavaScripts можно залезть и в другие фреймы
Мы не перезагружаем страницу - экономим траффик, + еще в строке состояния не появляется строка загрузки страницы. Все выглядит так как будто ничего не происходит :-) однако в тени XMLHttpRequest делает свое грязное дело |
| Автор: Opik 2.6.2005, 10:32 | ||
| PHP-DIRECTOR А кто сказал, что кто то перегружает страницу? в форме отправки ссылка идет на скрытый фрейм - он и обовляется (То же самое, что и при XMLHttpRequest обноввляется 1 скрипт ). И в том скрипте через JS очищается строка ввода. Добавлено @ 10:35
чем лучше? |
| Автор: Sardar 2.6.2005, 12:47 | ||
Opr уговаритать не буду
Никаких скриптов не обновляеться, ты не понял механизма |
| Автор: Black 2.6.2005, 12:57 | ||
Ну XMLHttpRequest лучше ифреймов. Он меньше памяти заставляет пожирать браузер и не гадит в history браузера. И нет этих щелчков. Ох как они раздражают если чат обновляется каждые 5 сек А фреймы надо избегать, т.к. они не правильно отображаются разными браузерами. Особенно проблемы с их рамками. Все браузеры рисуют их по разному. Да и организация W3C рекомендует от них отказаться. Действительно самый современный чат должен быть на 1) слоях (div) вместо таблиц. 2) Вместо фреймов - overflow: auto 3) Вместо ифреймов - XMLHttpRequest 4) На языке XHTML 1.0 |
| Автор: Opik 2.6.2005, 13:19 | ||||||||||
PHP-DIRECTOR
А кто сказал, что iframe? =)
ну посылается запрос на скрипт, он всё равно скрипт как бы "обновляется" заного
Юзая фреймы, на примере списка онлайн юзеров, просто обновляем фрейм. Как же быть если там слой? (div, overflow)? Посылать тот же XMLHttpRequest, только на список пользователей и инсертить в слой?
в чем отличие? Добавлено @ 13:22
задам вопрос подругому: в чем сходство?))))) |
| Автор: Opik 2.6.2005, 14:11 | ||
http://opik.ru/js/frame.html что то типо того что ли?
Однако, при первой загрузки слои как то съезжают... |
| Автор: Opik 2.6.2005, 16:42 |
| Вопрос. как прогрукрутить скроллинг вниз у div: overflow : auto? |
| Автор: Рыжий 2.6.2005, 18:03 | ||||
Ну например можно в css прописать:
©Sardar chatwindow - это id div'a. |
| Автор: Aliance 2.6.2005, 18:37 |
| Opr В новом топике... Средствами JS? |
| Автор: Opik 2.6.2005, 18:39 |
| Скроллинг то есть, его нужно прокрутить вниз. |
| Автор: mickron 3.6.2005, 00:21 |
| кстати, когда пытался писать чат тоже натолкнулся на скроллинг в диве... |
| Автор: Sardar 3.6.2005, 00:35 | ||
Юзаем свойство scrollTop:
А теперь офтоп закончили, все вопросы не в тему в новом топе |