[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод комментов без перезагрузки
xSnaip
Нужно реализовать вывод комментариев на странице без перезагрузки страницы.
Комментарии 2х уровневые, т.е. сам коммент и ответы на него. Подскажите плиз как лучше это реализовать.
Хотел сделать чтобы сравнивалось количество записей в БД каждые 5 - 10 секунд, но тогда если кто то удалит, а кто то добавит коммент или просто отредактируют запись, это работать не будет, т.к. количество записей не изменится.
Игорь_Vasinsky
ну ты сделай обработчик комментариев отдельным php скриптом, а сам скрипт дёргай аяксом и выводи контент в нужном тебе месте

гугли ajax, jquery ajax

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
xSnaip
Да это понятно. Я про то что как можно отслеживать с момента генерации страницы какие комментарии добавились, какие удалились, а какие изменились.
Сначала я сделал чтобы проверялось количество комментов и если их становилось больше (например на 2), то по дате последние 2 (limit) брал из БД, но возникла проблема что если кто то у человека коммент удалит, а в это время кто нить добавит то их количество остается то же и скрипт уже ничего не делает. Ну и соответственно когда пользователь просто отредактирует свой коммент, то их количество так же остается неизменным и скрипт ничего не делает.
Игорь_Vasinsky
да ты просто пропустил мимо ушей что я тебе сказал.

вот вместе с JQ

<script type="text/javascript">
function ajaxcl () {
var xmlhttp;
if ( window.XMLHttpRequest ) {
// IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// IE6, IE5
xmlhttp = new ActiveXObject ( "Microsoft.XMLHTTP" );
}
// обрабатываем ответ
xmlhttp.onreadystatechange = function () {
// если запрос к скрипту удачный
if ( xmlhttp.readyState == 4 ) {
//Вывод комментов со php обработчика
document.getElementById("comment").innerHTML=xmlhttp.responseText;

}
}

// отправляем запрос к php обработчику
xmlhttp.open ( "GET", "getcomments.php?rand="+Math.random(), true );
xmlhttp.send ();
//Интервал обращения к php скрипту 1сек
setTimeout('ajaxcl();', 1000);
}
$(document).ready(ajaxcl());
</
script>


можно передавать n - параметров в url (GET)

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
xSnaip
Если я правильно понял ты предлагаешь обновлять каждую секунду весь блок с комментариями, а не добавлять, удалять и изменять каждый коммент в отдельности ?
Игорь_Vasinsky
1. можешь увеличить время
2. можешь в php обработчике делать какие хочешь проверки

что больше съест ресурсов

1. проверить изменение комментов и если что считать всё с изменениями
2. вывести комменты

1 или 2 ?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
можно вообще задействовать кэш

и если кол-во комментов изменилось - то обновить кэш

тем самым сократишь до максимума обращение к БД

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
xSnaip
Цитата
и если кол-во комментов изменилось - то обновить кэш


А если кто то просто отредактировал коммент, то количество комментов не изменится. И тоже самое произойдет если 1 коммент удалят, а 1 добавят, то количество останется то же самое. Вот именно в этом была моя проблема. Мне нужна была логика того как это можно отследить. Потому что не оч хотелось обновлять ВЕСЬ div с комментами.

Но все равно большое спасибо.
Игорь_Vasinsky
обновление коммента

можно менять время поста коммента при редактировании и отслеживать в обработчике (а можно и фиксировать время апдейта)

допустим аякс дёргает обработчик 1 раз в 5 минут

значит достаточно глянут были ли запостены комменты в последние 5 минут - если есть коммент (ы) с свежей датой - обновить кэш

тут больше математика

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
Как-то так:
1 Делаем аякс-запрос и передаем в параметрах ид комментируемого объекта, дату последнего комментария на клиенте.
2 В ответ от сервера получаем ид всех комментариев для этого комментируемого объекта и новые комментарии с parent_id если есть
3 яваскриптом сотрим ид всех комментов на странице и ищем в списке, только что пришедшем в ответе, если нет - то коммент удален (выпиливаем из DOM), затем вставляем в хтмл новые комментарии, если есть parent_id, то сразу после коомента с ид=parent_id иначе в конец списка
Игорь_Vasinsky
3к комментов - повесили браузер...

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
Цитата
3к комментов - повесили браузер...

можно выводить страницами
если имеется ввиду поиск по ид, то можно просто сравнивать кол-во комментов и кол-во прищедших ид минус кол-во новых комментов, и уже из этого принимать решение искать удалленные и сколько искать
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.