Каждый раз спустя 3 месяца пишу скрипт чата с нуля, мб звучит глупо, но приятно каждый раз находить новые решения. Причем чем дальше тем лучше... Вот решил выложить третию версию вместе с задизайненым скроллингом кусок кода. (выкладываю только js). При первом обращении к скрипту подгружает последние 15 сообщений, последующие обновит если поступило новое. [js] var scroll = '#scrollbar'; var script_url = 'chat.php'; // Путь до скрипта var id_msg = 0; // Стандартное значение (0 - загружает список при первом посещении) var update_timer = 1000; // Время обновления новых сообщений в чате (мс) function showScroll() { // Функция запускает скроллинг (после того как список сообщений построен) $(scroll).tinyscrollbar(); $(scroll).tinyscrollbar_update('bottom'); } function show_msg() { // Функция загрузки сообщений // Получаем последний ID сообщений $.get(script_url+'?get_last', function(msg_data) { last_id = msg_data; // Выполним скрипт ниже если ид последнего сообщения не равно ид текущего. if(last_id != id_msg) { // Отправляем ID последнего сообщения и последний ID который получил пользователь + получаем объекты (json) $.getJSON(script_url, {'last_id' : last_id, 'id_msg' : id_msg}, function (data) { $.each(data, function (index, value) { id_msg = value["msg_id"]; // Присваиваем последний ID сообщения который получил пользователь $('#msg').append('<div class="msg_text">'+value["msg_text"]+'</div>'); }); $("#sc_bar").addClass("scrollbar"); showScroll(); }); } }); } $(document).ready(function(){ show_msg(); setInterval('show_msg()',update_timer); }); [/js] Так вот, работает прекрасно, но хочу критику и совет) сами понимаете... спасибо
Вовсе нет. Вполне интересный подход. Но я бы предложил когда в следующий раз писать будешь, подгружать все последние сообщения которые даёт сервер. Т.е при логине выдавать ID-сессии, и на стороне клиента чтоб был только он. А уже серверная сторона при получении запроса выдавала бы необходимое количество сообщений.
Да это тоже интересно) Но ведь у меня сейчас также берет необходимое кол-во сообщений.. к тому же для проверки выполняется только [js]$.get(script_url+'?get_last', function(msg_data) { last_id = msg_data;[/js] PHP: if(isset($_GET['get_last'])) { $request = mysql_query("SELECT MAX(msg_id) AS last_id FROM msg"); $row = mysql_fetch_assoc($request); die($row['last_id']); }
Просто сбил с толку фрагмент (читал "по диагонали") Имхо избавиться от него надо, т.е упростить всё ещё сильнее...
хм, через json мне в дальнейшем удобно будет вытаскивать данные) да и сейчас легко сразу в переменную id сообщения (последнее который юзер получил) добавить)) а какой способ еще проще?)
Ну да, если удобно то пусть, но Первый шаг можно выкинуть к чертям. Запрашиваем сообщения: - есть новые = приходят - нет новых = не приходят