- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Доброго времени суток форумяне! Нужно помощь с чатом на аяксе. При отображении сообщений иногда появляются дубли одни и тех же сообщений. При этом в базу все ровно пишется, т.е. проблема только в отображении. На настоящий момент отображение происходит в двух случаях - автоматически обновляется раз в 1 секунду, и при отправке сообщения.
Подскажите пожалуйста в какую сторону копать? С чем может быть связан этот глюк? И самое главное - как его лечить?
может где-то append стоит, который добавляет к существующему, а так без кода труднова-то даже думать
Возможно передаётся не правильный идентификатор последнего показанного сообщения при автоматическом обновлении.
ошибка где-то в логике кода :)))))))
Ну вообщем код в студию:)
изучи подробнее в каких браузерах это происходит, а то есть нерешаемые глюки, которые лечатся только учетом и отбросом подобных запросов на сервере.
countonline:0, // Количество пользователей онлайн
timer:false, // Таймер обновления чата
smiles_tab_visiblity:false, // Видимость панели смайлов
last:{
id:'', // Идентификатор последнего полученного сообщения
online:false, // Хеш списка пользователей онлайн
offset:0 // Смещение прокрутки относительно начала
}
}
function chat_show() {
clearTimeout(chat.timer);
ajax({
a:'sunny.chat.get',
id:viewer_id,
lid:chat.last.id,
success:function(data) {
if(data == null) {
chat.timer = setTimeout("chat_show()", 3000);
return false;
}
// Добавим сообщения в окно чата
if(chat.last.id < data.data.lid) {
chat.last.id = data.data.lid;
jQuery('#chat').append(data.data.data);
if(data.data.data != '' && jQuery('#chat').scrollTop() >= chat.last.offset) {
jQuery('#chat').stop().animate({scrollTop: 999999}, 1100);//scrollTop(99999);
chat.last.offset = jQuery('#chat').scrollTop();
}
}
// Обновим кто онлайн
if(data.data.onlinehash != chat.last.online) {
chat.last.online = data.data.onlinehash;
var textonline = [];
for(i in data.data.online) {
var usr = data.data.online;
textonline.push('<a href="http://vkontakte.ru/id'+usr['userid']+'" target="_blank" title="'+usr['name']+'"><img src="'+usr['photo']+'" /></a>');
if(textonline.length == 10)
textonline[textonline.length-1] = textonline[textonline.length-1]+'<br />';
if(textonline.length == 20)
break;
}
jQuery('#inchat_users').html(textonline.join(' '));
chat.countonline = data.data.online.length;
if(data.data.online.length > 20)
chat.countonline = '20 из '+data.data.online.length;
jQuery('#chatonline_count').html(chat.countonline);
}
chat.timer = setTimeout("chat_show()", 3000);
},
error:function() {
chat.timer = setTimeout("chat_show()", 5000);
}
});
}
function chat_send(msg) {
if(msg == entermsg)
return false;
document.getElementById('chat_text').value = '';
clearTimeout(chat.timer);
var fg = false;
if(typeof(adm) != 'undefined' && adm)
var fg = jQuery('#fg').attr('checked');
ajax({
a:'sunny.chat.send',
id:viewer_id,
lid:chat.last.id,
msg:msg,
fg:fg,
success:function(data) {
if(data == null) {
chat.timer = setTimeout("chat_show()", 3000);
return false;
}
// Добавим сообщения в окно чата
if(chat.last.id < data.data.lid) {
chat.last.id = data.data.lid;
if(data.data != '')
jQuery('#chat').append(data.data.data).scrollTop(99999);
chat.timer = setTimeout("chat_show()", 3000);
}
},
error:function() {
chat.timer = setTimeout("chat_show()", 5000);
}
});
}
это две функции чата, обновление и отправка сообщений
А после добавления, если самому обновить страницу, то всё в порядке? одно выводит или всё равно 2?
Snoopik, если обновить то все будет нормально. Т.к. в базу пишется без дублей. Это проблема отображения сообщения при отправке возникает.