2010-10-26 87 views
2

这是我遇到过几次的情况,不知道最佳方法是什么。使用Ajax加载新内容

假设我有一些用户可以通过Ajax添加的动态内容。例如,使用Stack Overflow的注释 - 人们可以使用Ajax将注释直接添加到页面中。

问题是,我如何实现新内容本身的添加。例如,它看起来像堆栈溢出用来添加注释的ajax调用,只是返回代替所有注释(而不仅仅是新注释)的html。这样可以节省Javascript代码中的冗余逻辑,它必须“知道”HTML的外观。

这是最好的方法吗?如果是这样,在Django中如何最好地实现它,以便没有冗余(即使视图不必知道html的样子是什么?)

谢谢!

编辑:在我的具体情况下,在此期间没有其他评论被添加的危险 - 这完全是最佳实施的问题。

回答

4

如果内容很简单,我会得到JSON并在jQuery中构建HTML。如果它很复杂,我会创建一个模板并在服务器上调用render()并返回HTML(jQuery可以附加到其他内容或替换现有内容)。

+0

谢谢 - 这就是我最终做的事情(使用render_to_string来呈现特定的片段。) – 2010-10-27 09:02:51

+1

我总是发布一个jQuery插件,它是taconite。 (http://jquery.malsup.com/taconite/)它可以允许复杂的AJAX/Django /浏览器交互,根本不需要任何神经元。 :-) – 2010-10-28 04:09:02

1

更新所有评论的原因是要考虑其他人也可能同时提交的其他评论。为了使网站保持真正的动态,您可以做到这一点,甚至可以在页面加载时使用最新提交的评论ID加载一个变量,并设置一个返回的计时器来检查是否有更多的评论。如果有的话,将它们作为JSON对象返回,并将它们一次追加到当前页面的DIV中。这将是我首选的方式来处理它,因为然后你可以基于每个DIV的id或rel,这直接关系到评论的ID在数据库中的行动针对行动...

+0

Thasnk - 你对更新的原因提出了一个很好的观点。我已经更新了这个问题,因为那个具体原因现在对我来说并不重要。 – 2010-10-26 20:24:50

1

我不精通既不与Django也不精通Python,但我想所有服务器端语言的基本逻辑都是相似的。

当衡量任何一种方法的优劣时,事情取决于你想要优化的东西。如果带宽很重要,那么与传输现成的HTML相比,显然在通信中使用纯JSON会减少延迟。

但是,将服务器端视图功能复制到Javascript是一个单调乏味并且容易出错的过程。它只需要很多时间。

我个人认为,在大多数情况下(对于中小型流量站点),将HTML片段放在服务器端并将容器内容(例如div的内容)简单地替换为AJAX回调功能。当然,替换整个页面会很愚蠢,因此您的Django应用程序需要支持输出文档的特定区域。