这是我遇到过几次的情况,不知道最好的方法是什么。
假设我有一些用户可以通过Ajax添加的动态内容。例如,使用Stack Overflow的注释 - 人们可以使用Ajax直接在页面上添加注释。
问题是,如何实现新内容的添加本身。例如,它看起来像Stack Overflow用来添加注释的ajax调用,只返回html,它替换所有注释(而不仅仅是新注释)。这样就可以在Javascript代码中保存冗余逻辑,Javascript代码必须“知道”html的外观。
这是最好的方法吗?如果是这样,如何最好在Django中实现它,以便没有冗余(即,以便视图不必知道html的样子?)
谢谢!
编辑:在我的具体案例中,同时没有添加其他评论的危险 - 这纯粹是最佳实施的问题。
答案 0 :(得分:4)
如果内容很简单,我会得到JSON并在jQuery中构建HTML。如果它很复杂,我会创建一个模板并在服务器上调用render()并返回HTML(jQuery可以附加到其他内容或替换现有内容)。
答案 1 :(得分:1)
更新所有评论的原因是考虑到其他人在此期间也可能提交的其他评论。为了使网站保持真正的动态,您可以执行该操作,甚至可以在加载页面时,使用最新提交的注释ID加载变量,并设置一个返回的计时器,以检查从那时起是否有更多注释。如果有,则将它们作为JSON对象返回,并将它们一次附加到当前页面上。这将是我处理它的首选方式,因为您可以根据每个DIV的id或rel来定位操作,这直接关系到数据库中注释的ID ...
答案 2 :(得分:1)
我不熟悉Django和Python,但我认为所有服务器端语言的基本逻辑都相似。
在权衡任何一种方法的优缺点时,取决于您想要优化的内容。如果带宽很重要,那么与传输现成的HTML相比,显然在通信中使用纯JSON可以减少延迟。
但是,将服务器端视图功能复制到Javascript是一个繁琐且容易出错的过程。这需要很多时间。
我个人觉得在大多数情况下(对于中小型流量网站),将HTML片段放在服务器端并简单地替换容器内容(例如div
的内容)就完全没了问题一个AJAX回调函数。当然,替换整个页面会很愚蠢,因此您的Django应用程序需要支持输出文档的特定区域。