Перейти к содержимому

Сервис обмена электронных валют

Выбрать шаблон и создать сайт

Ajax окно чата

#1 Scream

Scream
  • Пользователь
  • 42 сообщений
  • Репутация: 0
0

Отправлено 05 Май 2010 - 14:36

Как на ajax можно реализовать такое, чтоб когда в таблице бд появляется новая запись - чтоб эта запись выводилась как в окне чата.
На пример "Быстрые сообщения" вконтакте. Приходит сообщение - оно появляется под остальными сообщениями.

 

 

  • 0

#2 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 05 Май 2010 - 15:08

А там должен, я так думаю, таймер стоять, который через определенное время просто обновляет блок или фрейм. В контакте они тоже приходят не мгновенно. Все зависит от периода обновления.
Я прав? Или поправьте меня.
  • 0

#3 reaboom

reaboom
  • Пользователь
  • 40 сообщений
  • Репутация: 0

Отправлено 05 Май 2010 - 18:12

Прав :(


  • 0

#4 Scream

Scream
    Topic Starter
  • Пользователь
  • 42 сообщений
  • Репутация: 0

Отправлено 05 Май 2010 - 20:59

Прав, но как это реализовать через JS не использую iframe?
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Май 2010 - 20:41

Scream, Ajax + XML или JSON

1) Ставим запуск функции каждые 30 секунд, можно на основе setInterval()
2) Функция делает запрос на поиск новых сообщений, в качестве параметра она должна передавать на сервер id последнего сообщения которое отображено на странице
3) Получаем ответ от сервера в строго-структурированном формате, либо XML, либо JSON, либо любой другой, который понимает JS.
4) Разбираем ответ посредством JS, он умеет работать с XML и другими форматами. Не забываем из полученных данных занести в глобальную переменную или куда ещё значение id последнего сообщения. Нужно дял последующих сообщений.
4) Добавление сообщения реализуется на DOM-модели или юзаем фреймверки.
  • 0

#6 Scream

Scream
    Topic Starter
  • Пользователь
  • 42 сообщений
  • Репутация: 0

Отправлено 09 Май 2010 - 07:50

ZiTosS, единственная проблема которая меня все это время загоняла в тупик - как у новых сообщений которые мы читаем сменить статус на "прочитано"?
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Май 2010 - 17:04

Scream, не очень понял о чем ты. Но я же тебе сказал, что мы всегда будем знать о последнем сообщении, которое мы прочитали за последнее обращение к серверу. Поэтому мы будем знать, что прочитал текущий пользователь, а что ещё нет. Так как JS работает на стороне Клиента, у каждого пользователя последнее прочитанное сообщение будет иметь свой ID и обновляться окно чата будет у каждого в свой отмеченный момент времени.
Не понимаю, с чем у тебя проблема?
  • 0

#8 REiCh

REiCh
  • Пользователь
  • 20 сообщений
  • Репутация: 0

Отправлено 01 Июнь 2010 - 12:59

Scream, Ajax + XML или JSON


Это работает неправельно :) ;) Оно появляется и исчезает ;)
  • 0

#9 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 02 Июнь 2010 - 08:49

В чате нет понятия "Прочитанные сообщения".
Используй фреймворки. Например в jQuery удобно использовать appendTo. Чтобы добавлять новые строки. А проверять надо не раз в 30 секунд, а раз в 3 секунды через AJAX. И лучше использовать ля передачи JSON. Он быстрее работает.

Схема примерно такая.
Сообщения при отправлении записываются в Базу данных.
В сессии необходимо записывать ID последнего пришедшего сообщения.
AJAX проверяет базу данных. Если есть сообщения после ID, который в сессии, то добавляет с помощью appendTo или appendChild к уже существующим сообщениям строчки.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru