【问题标题】:Loading New Content with Ajax使用 Ajax 加载新内容
【发布时间】:2011-04-30 23:04:59
【问题描述】:

这种情况我遇到过好几次了,不知道最好的方法是什么。

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

问题是,我如何实现新内容的添加本身。例如,它看起来像 Stack Overflow 用来添加评论的 ajax 调用,只是返回替换 all 的 cmets(不仅仅是新的)的 html。这种方式可以节省 Javascript 代码中的冗余逻辑,该代码必须“知道”html 的样子。

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

谢谢!

编辑:在我的具体情况下,同时添加其他 cmets 没有危险 - 这纯粹是最佳实施的问题。

【问题讨论】:

    标签: javascript python ajax django


    【解决方案1】:

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

    【讨论】:

    • 谢谢 - 这就是我最终做的事情(使用 render_to_string 渲染特定的 sn-ps。)
    • 我一直吹捧的一个 jQuery 插件是 taconite。 (jquery.malsup.com/taconite) 它可以允许复杂的 AJAX/Django/浏览器交互,而几乎不需要任何神经元。 :-)
    【解决方案2】:

    更新所有 cmets 的原因是考虑到其他人可能同时提交的其他 cmets。为了使站点真正保持动态,您可以这样做,甚至在加载页面时,使用最新提交的评论 ID 加载一个变量,并设置一个计时器来检查从那时起是否有更多的 cmets。如果有,将它们作为 JSON 对象返回,并一次将它们附加到当前页面一个 DIV。这将是我首选的处理方式,因为您可以根据每个 DIV 的 id 或 rel 定位操作,这与数据库中的评论 ID 直接相关...

    【讨论】:

    • Thasnk - 你对更新的原因提出了一个很好的观点。我已经更新了这个问题,因为这个具体原因现在对我来说并不重要。
    【解决方案3】:

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

    在权衡这两种方法的优缺点时,取决于您要优化的内容。如果带宽很重要,那么与传输现成的 HTML 相比,在通信中使用纯 JSON 显然可以减少延迟。

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 2016-01-31
      • 2017-03-15
      • 1970-01-01
      • 2021-04-29
      • 2013-05-09
      • 2014-06-23
      • 2013-03-13
      相关资源
      最近更新 更多