#javascript #ajax #jquery #comments #dom-manipulation
#javascript #ajax #jquery #Комментарии #dom-манипуляция
Вопрос:
Я улучшаю свою функцию комментариев и выбираю между двумя стратегиями. Мой список комментариев представляет собой неупорядоченный список.
- Замените UL в DOM на UL из ответа.
- Вставьте последний LI из ответа в UL в DOM.
Первый вариант проще, но я чувствую, что это не лучший или правильный способ. Если я хочу использовать второй вариант, как мне узнать, какие комментарии в ответе новее, чем те, что в DOM, если одновременно было опубликовано более одного комментария?
Мысли?
Ответ №1:
Вы можете сохранить временную метку в качестве переменной, на которую будет ссылаться JS.
Когда вы загружаете страницу, язык вашей серверной части присваивает переменной javascript временную метку последнего загружаемого комментария. С этого момента каждый раз, когда вы загружаете новые комментарии, отправляйте последнюю запрошенную вами временную метку. Ваш серверный язык будет проверять наличие комментариев, которые новее, чем эта временная метка. Обязательно обновляйте временную метку по мере отправки дополнительных запросов. Либо отправляя его как часть ответа, либо отслеживая, когда вы отправили запрос.
Ответ №2:
Я бы выбрал вариант 1. Это намного проще реализовать и на самом деле может выполняться быстрее. Однако убедитесь, что у вас нет никаких обработчиков событий, привязанных к LIs — они перестанут работать после того, как вы обновите их родительский UL. Используйте делегаты, чтобы избежать этого.
Ответ №3:
Предполагая, что ваш неупорядоченный список выглядит следующим образом:
<ul id="commentsList">
<li>Comment 1</li>
</ul>
в javascript вы напишете:
$.ajax({
url: "the ajax url",
type: "GET",
data: {//whatever data},
success: function(r){
//Assuming r contains the comment.
//(Don't send html as the response but just the comment text
$("#commentsList").append("<li>" r "<li>");
}
});
Ответ №4:
Вы должны добавить к комментарию UL
последние LI
значения. Почему?вам не обязательно брать весь полный список UL и заменять старый. Сократите изменения, которые необходимо внести. Просто возьмите последнюю LI
и добавьте ее последней. LESS WORK MORE EFFICIENT
Что касается вашего вопроса о том, как узнать, какой из них является последним комментарием. Сохраняйте временную метку, поскольку комментарии хранятся в базе данных. При первом извлечении комментариев попробуйте назначить переменную, содержащую временную метку последнего элемента, затем после поиска в базе данных всего, что соответствует сохраненной вами временной метке, получите список и добавьте их, затем снова обновите переменную с последней временной меткой.