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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XMLHttpRequest, Использование 
:(
    Опции темы
Opik
Дата 1.6.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



вот пишу чат, понравилась эта технология, вот только немного не пойму как её присобачить smile
Непонятки именно с обновлением чата. Т.е пользователь пишет мессаку, ждем ок, доюбавляется мессага, и сразу же делается вывод своей + новые. а как сделать автообновление? Обновлять невидимый фрейм? Зачем тогда XMLHttpRequest? Объясните кто нибудь технологию чата с использованием XMLHttpRequest?
PM MAIL Skype   Вверх
Sardar
Дата 1.6.2005, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Через XMLHttpRequest(или любой другой компонент) ты постоянно опрашиваешь сервер за новыми мессагами. Отправляя инфу(пост, сообщение) ты по прежнему опрашиваешь сервер о новых мессагах. Получив инфу DOM'ом вставляем её в окно чата.

Где конкретно не ясно?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Opik
Дата 1.6.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Sardar
Автообновление. Раньше оно делалось в невидимом фрейме.
Цитата
Через XMLHttpRequest(или любой другой компонент) ты постоянно опрашиваешь сервер за новыми мессагами.

где его опрашивать!?
PM MAIL Skype   Вверх
Sardar
Дата 1.6.2005, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Opr @ 1.6.2005, 18:35)
Раньше оно делалось в невидимом фрейме.

Угу, а теперь представь что это же автообновление делаеться XMLHttpRequest. Вызывая send, ты опрашиваешь сервер передавая ему параметры GET'ом или POST'ом, в идеали в результате приходит валидный XML, хотя не обязательно. Делаешь запрос( смотри в любом примере, хотя бы в топиках ниже, много раз показывалось), получаешь инфу. Эту инфу показываешь юзеру, попутно форматируя как тебе нравиться. Если пришёл валидный XML, то вообще красота, юзай XPath для выборки того что тебе нужно.

Чую тебе не ясен сам механизм... Посмотри эту софтинку: http://forum.vingrad.ru/index.php?showtopic=53606
Кстати JSInteractiveRequest работать будет и под старыми браузерами.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Opik
Дата 1.6.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Sardar
Читал. Ты меня немного не понимаешь. Смотри, мне нужно автообновление, так? так. Значит нужно что бы всё таки что то обновлялось. Что?
XMLHttpRequest я хочу прикрутить в тот фрейм, где строка ввода. Но не буду же я обновлять этот фрейм всегда. Я не пойму как сделать автообновление.
PM MAIL Skype   Вверх
Black
Дата 1.6.2005, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Opr
Вот код из моего чата:

Код

// функция для посылки запросов на сервер
setInterval('LoadData(\"refresh.php\")', 6000);

function LoadData(url)
{
    // для браузера Mozilla, Firefox
    if (window.XMLHttpRequest)
    {
        GetData = new XMLHttpRequest();
        GetData.onreadystatechange = processChange;
        GetData.open('post', url, true);
        GetData.send(null);

    // если браузер IE (проверям наличие ActiveX)
    } else if (window.ActiveXObject)
      {
        GetData = new ActiveXObject('Microsoft.XMLHTTP');
        if (GetData)
            {
            GetData.onreadystatechange = processChange;
            GetData.open('post', url, true);
            GetData.send();
            }
      }
}

// функция следит за изменением статуса запроса и выполняет полученный JavaScript код
function processChange()
{
    // только при состоянии 'complete'
    if (GetData.readyState == 4)
       {
        // для статуса 'OK'
        if (GetData.status == 200)
           {
            // получаем данные ответа сервера
            CodeScript = GetData.responseText;
            // выполняем Java-Script код
            eval(CodeScript);
           }
       }
}


CodeScript - в эту переменную возвращай код скрипта, т.е. как обычно код который допишет при помощи DOM новую строку в чат



Добавлено @ 22:22
Opr

Цитата
начит нужно что бы всё таки что то обновлялось. Что?


ну XMLHttpRequest - это и есть технология которая ничего не обновляет.. ты вероятно ее немного не понял.. все делает эта строка:

Код

setInterval('LoadData(\"refresh.php\")', 6000); 


которая сама обновляет все через 6 сек

причем refresh.php - это есть путь к скрипту который должен отдавать новые сообщения

XMLHttpRequest - посылает скрытые GET или POST запросы без обновления страницы и может получить ответ в ту страницу из которой оно было вызвано. Вообще-то классная технология, все мои скрипты на ней работают

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


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 1.6.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Opr @ 1.6.2005, 21:04)
Значит нужно что бы всё таки что то обновлялось. Что?

Дык ты по интервалу в скунд 5-10 обращаешся к серверу через XMLHttpRequest. Этот обьект обращаеться к серверу, фрейм не перезагружаеться и вообще фрейм не нужен, ну разве как элемент дизайна smile


Смотрим код PHP-DIRECTOR, видим как он каждые 6 секунд опрашивает сервер, загружая некий исходник и кидая его на eval.
Я бы конечно не советовал передавать исходник JS, что мешает отослать нормальный валидный XML? По XML'у на клиенте генерим мессагу с разметкой и показываем юзеру.

Короче механизм такой: фреймы в стороне, они не нужны. Обьект XMLHTtpRequest может делать запросы к серверу(для того он и создавался) и может подгружать вывод сервера. Вывод ты можешь получить и заюзать как угодно. Посылать инфу можно как и в формах GET'ом или POST'ом.
Добавлено @ 22:47
Упс, PHP-DIRECTOR уже залил второй пост smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 1.6.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Sardar
а мне кажется что отдавать скрипт выгоднее... это меньше места занимает в Кб.

Например на странице где расположен XMLHttpRequest есть функция которая добавляет мессаги, и мы ее запускаем через eval(). Т.е.

Код

function NewMess(mess,login)
{
ла ла я хожу ищу кота и дописываю сообщения в чат
}


А в eval() отдавать нечто вроде:

mess['','',''] - массив новых сообщений
login['','',''] - массив логинов
NewMess(mess,login) - запускаем функцию для добавления новых месаг в чат.

Вообщем, так мой чат работает smile
Не жалуюсь. Траффик минимальный.

Это сообщение отредактировал(а) PHP-DIRECTOR - 1.6.2005, 22:56


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Sardar
Дата 1.6.2005, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



[флейм]

Цитата(PHP @ 1.6.2005, 21:54)
а мне кажется что отдавать скрипт выгоднее... это меньше места занимает в Кб

Угу, но это есть большой "не хорошо" smile Стереотипы.

Я бы отдавал просто массив с инфой, который попробовал бы распарсить... Люблю парсинг smile

[/флейм]


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Opik
Дата 1.6.2005, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Мне нужно было только :
Код

setInterval('LoadData(\"refresh.php\")', 6000);

Добавлено @ 23:31
ТОлько теперь другой вопрос, в чем собственно выигрыш в скорости!?
PM MAIL Skype   Вверх
Sardar
Дата 1.6.2005, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Не отдаём бродилке рендерить всю получаемую лажу как при загрузке всей страницы. И кстати кто сказал что будет быстрее в скорости? smile Будет незаметно, без щёлчков в ИЕ, плавно подгружаться контент, это удобно.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Opik
Дата 2.6.2005, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Sardar
http://mysitez.km.ua/Programming/?jshttpsend тут внизу smile
Цитата
Не отдаём бродилке рендерить всю получаемую лажу как при загрузке всей страницы

в том же фрейме можно "выводить" только нужную инфу smile
PM MAIL Skype   Вверх
Sardar
Дата 2.6.2005, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата(Opr @ 1.6.2005, 23:47)
Sardar
http://mysitez.km.ua/Programming/?jshttpsend тут внизу

Одно и тоже переписываемое почти слово в слово. Новых, не надуманных примеров народ не выкладывает. Допишу свой JSInteractiveRequest, вовзьмусь за общую клиентскую сторону чата(не обещаю в ближайшем будущем).

Цитата(Opr @ 1.6.2005, 23:47)
в том же фрейме можно "выводить" только нужную инфу

От это я и пытался втереть smile А фреймы лучше убрать и использовать слои overflow: auto

Похоже единственное что еще не удаёться через XMLHttpRequest это отсылка файлов, вряд ли это будет когда либо имплементированно по сображениям безопасности.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Black
Дата 2.6.2005, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


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

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



Opr

Цитата
в том же фрейме можно "выводить" только нужную инфу


ну не обязательно именно в том фрейме где запускаем XMLHttpRequest через JavaScripts можно залезть и в другие фреймы smile


Цитата
ТОлько теперь другой вопрос, в чем собственно выигрыш в скорости!?


Мы не перезагружаем страницу - экономим траффик, + еще в строке состояния не появляется строка загрузки страницы. Все выглядит так как будто ничего не происходит :-) однако в тени XMLHttpRequest делает свое грязное дело smile


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
Opik
Дата 2.6.2005, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



PHP-DIRECTOR
А кто сказал, что кто то перегружает страницу? в форме отправки ссылка идет на скрытый фрейм - он и обовляется (То же самое, что и при XMLHttpRequest обноввляется 1 скрипт ). И в том скрипте через JS очищается строка ввода.
Добавлено @ 10:35
Цитата
А фреймы лучше убрать и использовать слои overflow: auto

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


 




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


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

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