Ajax комментарии вставить LI или заменить UL? - PullRequest
1 голос
/ 17 апреля 2011

Я изменяю функцию комментариев и выбираю одну из двух стратегий.Мой список комментариев является неупорядоченным списком.

  1. Замените UL в DOM на UL из ответа.
  2. Вставьте последний LI из ответа в UL в DOM.

Первый вариант проще, но я чувствую, что это не лучший или правильный путь.Если я хочу использовать второй вариант, как узнать, какие комментарии в ответе новее, чем комментарии в DOM, если одновременно было опубликовано более одного комментария?

Мысли?

Ответы [ 4 ]

2 голосов
/ 17 апреля 2011

Вы можете сохранить метку времени в качестве переменной для ссылки JS.

Когда вы загружаете страницу, ваш серверный язык назначит метку времени последнего комментария для загрузки в переменную javascript.С этого момента каждый раз, когда вы загружаете больше комментариев, отправляйте последнюю отметку времени, которую вы запросили.Ваш серверный язык проверит наличие комментариев, которые новее, чем отметка времени.Обязательно обновляйте отметку времени, когда вы отправляете больше запросов.Отправьте его как часть ответа или проследите, когда вы отправили запрос.

0 голосов
/ 17 апреля 2011

Вы должны добавить комментарий UL с последними LI с. Почему? Вам не нужно захватывать весь полный список UL и заменять старый.Уменьшите изменения, которые должны быть сделаны.Просто возьмите последний LI и добавьте его в конце.LESS WORK MORE EFFICIENT

Итак, ваш вопрос о том, как узнать, какой из них является последним комментарием.Сохраните временную метку, так как комментарии хранятся в БД.При первом извлечении комментариев попробуйте назначить переменную, содержащую метку времени последнего элемента, затем после поиска в базе данных всего, что заполняет сохраненную вами метку времени, получите список и добавьте их, затем обновите переменную,снова с последней отметкой времени.

0 голосов
/ 17 апреля 2011

Предполагается, что ваш неупорядоченный список выглядит так:

<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>");
  }
});
0 голосов
/ 17 апреля 2011

Я бы выбрал вариант 1. Он намного проще в реализации и на самом деле может работать быстрее.Однако убедитесь, что у вас нет обработчиков событий , связанных с LI - они перестанут работать после обновления родительского UL.Используйте делегатов , чтобы избежать этого.

...