Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Наши скрипты > JSInteractiveRequest


Автор: Sardar 28.5.2005, 04:15
Ещё не готово, подождите smile Выложил что бы потестить и найти баги.

Реализованна серверная сторона: PHP, ещё бы Java
Клиентская сторона на JavaScript.

Скрипт позволяет интерактивно обмениваться данными между клиентом и сервером. Принцип загрузки не нов, основан на подкачке скриптов. Интересные моменты этой реализации:
  • безглючная работа с текстом, кодируется в UTF-8, что предотвращает всякого рода кракозябры
  • использование кук для отправки данных, это позволяет увеличить их обьём до 4кб. На русских текстах реально 800 байт... smile
  • безглючные хешьтаблицы(траблу увидел в http://dklab.ru/chicken/nablas/41.html)
Одновременно с тестами пишу BWT-DC сжатие, что позволит отправлять русские тексты размером до 3кб. Это актуально для чатов.

Код хорошо документирован. Если не понимаем, то лучше не трогайте и ждите нормального мана smile

Всем кто захочет потестировать/поковыряться в коде большой пасиб, ссылки:
http://sardar.vingrad.ru/JSInteractiveRequest/index.htm
http://sardar.vingrad.ru/JSInteractiveRequest/JSInteractiveRequest.js
http://sardar.vingrad.ru/JSInteractiveRequest/JSInteractiveRequest.php?source

На тестовой странице видим:
  • select - в котором выберем метод отправки. Cookie загадят на время ваши куки, ну важно что бы там места под введёный текст было. Кука умрёт при получении ответа. GET - в адресной строке, естественно она будет загажена smile
  • текстовое поле - вписываем текст отправляемый на сервер
  • кнопка Test - жмём для отправки запроса. Отсылаеться текущее время(timestamp) и текст из текстового поля
В ответ получим:
  • распечатанные данные, отправленные клиентом
  • распечатанный обьект JSInteractiveRequest, видно его состояние
  • распечатанные GET и COOKIE по которым видно как пришли данные
Советую глянуть в PHP код. Первый большой коментарий немного устарел, времени сейчас нет обновитьsmile Когда дойдёте на немного мудрённого парсинга - если что не понятно, пропускай, парсинг не важен smile

Автор: Aliance 28.5.2005, 13:50
Sardar
Зашел по ссылкам:
  • первая: поставь между строчками \n<br> - а то вправо на большое расстояние выходит =/
  • третья: комментарии не на русском :-D

А идея как у (JS|XML)HttpRequest`а? Работа с сервером без перезагрузки страницы?

Автор: Sardar 28.5.2005, 15:32
Цитата(Aliance @ 28.5.2005, 12:50)
А идея как у (JS|XML)HttpRequest`а? Работа с сервером без перезагрузки страницы?

Угу, тот же подход как у JSHttpRequest, но написал на мой взгляд лучше. Инфа перед отправкой сериализуеться в особый(трудно читаемый smile ) формат, который позволяет сэкономить пару байт на сериализии URL. Инфа может быть целым деревом.Также текста передаються в UTF-8, что исключает кракозябры. Осталось внести сжатие и будет полный продукт, для постройки интерактивных чатов. Получать от сервера можно целые страницы + отдельную инфу в виде дерева.

Автор: Aliance 28.5.2005, 15:36
Где посоветуешь такое пременять, кроме чатов, предпросмотра чего-либо и, возможно, проверок форм (наличие ника в БД)? Просто я пока сильной нужды в этом узреть немогу smile

Автор: diam 28.5.2005, 20:27
Sardar, извини, я ещё не посмотрел код (точнее, начал смотреть, но он большой smile ), вопросы.
1. Зачем используются cookie?
2. Про какое шифрование ты говорил?
3. Ты отправляешь данные в UTF-8. Они перекодируются на сервере?
4. Почему не UTF-16? Они же больше символов в себя вмещают.

З.Ы. На текущий момент с подгрузкой без перезагрузки решил все проблемы, кроме передачи файла на сервер smile. Проблемы с данными, размер которых может превысить 400 байт, решаю путём разбиения на несколько частей (ес-но, по договорённости с сервером smile ).

З.Ы.2. По всякому утыкивал XMLHttpRequest. Так и не получается отправить методом POST. Посему никак не пойму - да нафига такая му-му?

Автор: Sardar 28.5.2005, 20:44
Цитата(diam @ 28.5.2005, 19:27)
1. Зачем используются cookie?

Это один из вариантов отправки данных. В куках можно отправить 4кб против 1кб GET'ом

Цитата(diam @ 28.5.2005, 19:27)
2. Про какое шифрование ты говорил?

Так как текст в юникоде, то на русских текстах получим большую избыточность. Порешать это можно сжатием. Словарные и символьные(хафмана, PPM) не подходят(сложны для JS и малоэффективны в этом случае). BWT преобразование, а затем кодирование DC даст офигенный результат smile Но это как необязательная опция, дающая преимущество в чатах(длинные отсылаемые сообщения)

Цитата(diam @ 28.5.2005, 19:27)
3. Ты отправляешь данные в UTF-8. Они перекодируются на сервере?

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

Цитата(diam @ 28.5.2005, 19:27)
4. Почему не UTF-16? Они же больше символов в себя вмещают.

Ты не совсем прав, UTF это способ сериализации(записи) юникодовского текста (UCS-2(4)). В UTF-8 минимальный символ состоит из одного байта(совпадают с ASCII), в UTF-16 минимальный символ из двух байт. UTF-8 популярен, так как на английских текстах не имеет избыточности. Оба способа сериализуют по момему UCS-4, 4 байтовый юникод. В любом случае все популярные языки в нём есть smile

Файл отправить не иначе как формой нельзя(исключаем разного рода фичи ИЕ, что закрываються после каждого нового сервиспака). Любой браузер очень щепитильно относиться к отправке файла, иначе можно всю конфиденциальную инфу юзера незаметно выкачать smile
На текущий момент отослать файл можно только формой, имя файла может задать только юзер и никак иначе.
Добавлено @ 20:46
Цитата(Aliance @ 28.5.2005, 14:36)
Где посоветуешь такое пременять, кроме чатов, предпросмотра чего-либо и, возможно, проверок форм (наличие ника в БД)? Просто я пока сильной нужды в этом узреть немогу

Разного рода live фичи, типа живого поиска по форуму. Писал для себя, для своего проекта, так что для себя применение я нашёл smile

Автор: diam 28.5.2005, 21:26
Цитата(Sardar @ 28.5.2005, 20:44)
BWT преобразование, а затем кодирование DC даст офигенный результат smile

Это есть в JS, или ты сам это напишешь?

Автор: Sardar 28.5.2005, 22:02
Цитата(diam @ 28.5.2005, 20:26)
Это есть в JS, или ты сам это напишешь?

Сам, алгоритм пока не сложный...

Автор: Elfet 6.9.2005, 20:04
Sardar
Что-то я не понимаю как это работает smile Хочу всё себе сделать чат без фреймов smile

Автор: Aliance 6.9.2005, 20:12
Вот, пожалуйста, чат, написанный на XMLHttpRequest:
http://www.plasticshore.com/projects/chat/index.html

Автор: Elfet 6.9.2005, 20:23
Из той статьи вроде понял как это работает, но соовсем не понял как это использовать smile может ты напишешь какую-нибудь доку об использовании? smile
Добавлено @ 20:27
Aliance
Как этот чат работает тоже понять немогу smile Видимо плохо знаю ЯваСкрипты что бы с первого раза код понять

Автор: Aliance 6.9.2005, 21:02
Elfet
Введи в поиск HttpRequest и прочти все темы, многому научишься!

Автор: fregs 10.11.2005, 17:48
крыша под конец рабочего дня уже плавится...
взялся разбираться и сел на задницу...
сам вызов то как сделать?
мне нужно получить содержимое страницы t1.php?t=23
рисую в жскрипте примера

Код

function GetThread(id) {
  if(a==null) {
    a=new JSInteractiveRequest("mods/fstrange/int_req.php");
    a.onload=function(data, text) {
      alert(this.method);
      document.getElementById("t_fl_1").appendChild(document.createTextNode(text));
    };
  }
  a.method='GET';
  a.request('t1.php?t='+id);
}


Код

<img src="../i/prvw.gif" onclick="GetThread(23)" />
<div id=t_fl_1>
999999999999999999999999999999999999999
</div>


вызываю, смотрю через liveHTTPheaders
вижу

GET /vb/int_req.php?3561&conspec=sid465154553sc402&condat=t51.php%3Ft%3D5253 HTTP/1.1

ответ 200... хорошо
хорошо... но ответа не вижу

Автор: Sardar 11.11.2005, 01:03
Цитата(fregs @ 10.11.2005, 16:48)
мне нужно получить содержимое страницы t1.php?t=23

Ты обращаешся к странице mods/fstrange/int_req.php, которой передаёшь параметром 't1.php?t='+id, на сервере соотвественно нужно понять JSInteractiveRequest класс, опросить параметры и echо результат.

Вообще найдены ошибки работы скрипта с Оперой 8 и Нетскейпом 8, фиксить нет времени пока. Советую воспользоваться JSHttpRequest от Дмитрия Котерова на dklab.ru

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)