【问题标题】:Ajax comments insert LI or replace UL?Ajax注释插入LI还是替换UL?
【发布时间】:2011-04-17 18:22:26
【问题描述】:

我正在优化我的 cmets 功能,我在 2 种策略之间进行选择。我的 cmets 列表是一个无序列表。

  1. 将 DOM 中的 UL 替换为响应中的 UL。
  2. 将响应中的最后一个 LI 插入 DOM 中的 UL。

第一个选项更简单,但我觉得这不是最好或正确的方法。 如果我想使用第二个选项,如果同时发布了多个评论,我如何知道响应中的哪些 cmets 比 DOM 中的 cmets 更新?

想法?

【问题讨论】:

    标签: javascript ajax jquery comments dom-manipulation


    【解决方案1】:

    您可以将时间戳作为变量保留给 JS 参考。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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 附加到最新的LIs。 为什么?您不必获取所有完整的 UL 列表并替换旧列表。减少必须进行的更改。只需获取最新的LI 并将其附加到最后。 LESS WORK MORE EFFICIENT

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

          【讨论】:

            猜你喜欢
            • 2011-01-25
            • 1970-01-01
            • 1970-01-01
            • 2012-03-13
            • 2014-01-28
            • 1970-01-01
            • 1970-01-01
            • 2011-08-06
            • 2012-08-25
            相关资源
            最近更新 更多