Ajax注释插入LI还是替换UL?

时间:2011-04-17 10:04:12

标签: javascript ajax jquery comments dom-manipulation

我正在调整我的评论功能,我在两种策略之间做出选择。我的评论列表是无序列表。

  1. 将DOM中的UL替换为来自响应的UL。
  2. 将响应中的最后一个LI插入DOM中的UL。
  3. 第一种选择更简单,但我觉得这不是最好的或正确的方式。 如果我想使用第二个选项,如果同时发布多条评论,我怎么知道响应中的哪些评论比DOM中的评论更新?

    思想?

4 个答案:

答案 0 :(得分:2)

您可以将时间戳保留为JS引用的变量。

加载页面时,服务器端语言会将要加载的最后一条注释的时间戳分配给javascript变量。从那时起,每次加载更多评论时,都会发送您请求的最后一个时间戳。您的服务器端语言将检查比该时间戳更新的注释。确保在发送更多请求时更新时间戳。通过将其作为响应的一部分发送或跟踪您发送请求的时间。

答案 1 :(得分:0)

我会选择选项1.实现起来要简单得多,实际上可能会更快。但是请确保没有任何事件处理程序bound到LIs - 它们将在您更新其父UL后停止工作。使用delegates来避免这种情况。

答案 2 :(得分:0)

您应该使用最新的UL附加评论LI为什么?您不必获取所有完整的UL列表并替换旧的列表。减少必须进行的更改。只需抓住最新的LI并将其追加到最后。 LESS WORK MORE EFFICIENT

到目前为止,您的问题是关于如何知道哪一个是最新评论。存储时间戳,因为注释存储在DB中。在第一次获取注释的同时,尝试分配保存最后一项的时间戳的变量,然后在搜索数据库之后查找所有对您存储的时间戳感兴趣的内容,获取列表并附加它们,然后更新变量,再次使用最新的时间戳。

答案 3 :(得分:0)

假设你的无序列表是这样的:

<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>");
  }
});