【问题标题】:Ajax comments insert LI or replace UL?Ajax注释插入LI还是替换UL?
【发布时间】:2011-04-17 18:22:26
【问题描述】:
我正在优化我的 cmets 功能,我在 2 种策略之间进行选择。我的 cmets 列表是一个无序列表。
- 将 DOM 中的 UL 替换为响应中的 UL。
- 将响应中的最后一个 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 的同时,尝试分配保存最后一个项目的时间戳的变量,然后在数据库中搜索所有大于您存储的时间戳的内容后,获取列表并附加它们,然后更新变量,再次使用最新的时间戳。