Всем добра! Обычный чат на jQuery, обновление и отправка через Ajax. НО! Каждые 3 секунды обновление новых сообщений и если есть в нём картинка/фото, то вставляем в сообщение. Но каждые 3 секунды это фото блымает/моргает, т.е. каждый раз загружается. Что можно с этим сделать? Спасибо!
Код покажи, даже интересно. Ведь давно придумали именно для этого вебсокеты https://github.com/walkor/Workerman
Код (Javascript): setInterval(load,3000); function load(){ var id_dialog = $("#id_dialog").val(); $.ajax({ url: "/ajax", dataType: "json", type: "POST", data: { type: "dialogi", module: "loading", id_dialog: id_dialog }, success: function(data){ console.log(data); appendComments(data); } }); } function appendComments(data) { Просто в цикле выводит сообщения. --- Добавлено --- Запостил.
appendComments показывайте --- Добавлено --- Короче, я так понял вы каждый раз опрашивая сервер получаете вообще все сообщения которые там есть? А почему бы не брать данные только за последние 3 секунды? --- Добавлено --- И скорее всего вы обновляете данные так Код (Javascript): $( "dom" ).html(data); А если будете брать с сервера только последнее. то надо будет так: Код (Javascript): $( "dom" ).append(data);
UPD: Только у меня prepend, но разницы особой нет. Картинки постоянно грузятся. Расположены на нашем сервере. --- Добавлено --- Хм... Как тогда это различить? Кто загружен, а кто нет.
Ну подумайте, самое правильное это отталкиватся от даты загрузки. --- Добавлено --- То есть, допустим последний раз данные на сервере обновлялись час назад. Текущий клиент сделал последний опрос этих данных 15 минут назад. Значит ему ничего на свою страницу обновлять не надо. Естественно если он обновил страницу то все грузится заново. --- Добавлено --- Ну и каждая строчка данных должна иметь фиксированное время, когда оно туда добавилось --- Добавлено --- Чтобы клиент понимал что ему грузить а что нет.
Вообще если бы делал чатик, у меня б была такая логика. 1. Есть админ чата который имеет право создавать комнаты Код (Text): CREATE TABLE `chat_rooms` ( `id_room` int(11) NOT NULL, `room_name` varchar(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; INSERT INTO `chat_rooms`(`room_name`) VALUES ('room_1') 2. Пользователь зайдя в чат должен внести какой то распознаватель, имя. И программа должна проверится есть ли такой уже в базе Код (Text): CREATE TABLE `chat_user` ( `id_user` int(11) NOT NULL, `chat_user` varchar(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; 3. Если пользователь что то пишет в комнату то в базу пишется кто написал, во сколько написал, в какой комнате он это писал Код (Text): CREATE TABLE `chat` ( `id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `room_id` int(11) NOT NULL, `message` varchar(1000) NOT NULL, `date` date NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=cp1251; И уже по структуре этой таблицы можно легко отсеивать сообщения, банить не угодных и тп..) --- Добавлено --- И раз уж у вас чатик на ajax а бы хранил данные в таблице chat последние 24 часа от текущей даты, чтобы не было слишком много данных.
У меня +- такая же. Как же различить старые и новые данные? Что бы каждые 3 секунды картинка не грузилась?
Посылаешь на сервер id и дату последнего (первого, смотря в каком порядке у тебя выводятся) сообщения в чате, и выводишь только те, которые по дате >= последней и с другим id
Парни, не понимаю ваш ход мыслей Придумал по date-id проверять есть ли такое сообщение на странице или нет. Есть - НЕ обновляем его. Нет - обновим/добавим.
Да блин Когда ты обращаешься к свой таблице, сервер знает когда это происходит: PHP: SELECT NOW() Но если человек уже получал данные, То есть он загрузил свою страницу. Ему сразу php грузит всю информацию. Далее обновление происходит по средством ajax. И ты там можешь регулировать, что ему грузить а что нет
1. Человек открыл страницу: Код (Text): SELECT * FROM `chat` WHERE room_id = 1 2.Человек обновляет чат (посылает сообщение) или программа обновляет ему чат, по средством ajax Код (Text): SELECT * FROM `chat` WHERE room_id = 1 AND date >= NOW() - INTERVAL 3 SECOND она вычитает текущей даты три секунды. Все, у него свежие данные. Хотя я бы не рекомендовал обновлять так часто, лучше раз в минуту
это "пустой" комментарий к теме, что бы добавить решение себе в заметки. Админам на заметку, была бы полезна кнопка "добавить сообщение/тему в закладки". Нашел только отслеживание, но это лишнее, мне бы в закладки, что бы посмотреть при надобности )))