代码之家  ›  专栏  ›  技术社区  ›  Edan Maor

使用Ajax加载新内容

  •  2
  • Edan Maor  · 技术社区  · 16 年前

    这是我遇到过几次的情况,不确定最好的方法是什么。

    假设我有一些用户可以通过Ajax添加到的动态内容。例如,以堆栈溢出的注释为例——人们可以使用Ajax直接在页面上添加注释。

    问题是,如何实现新内容的添加本身。例如,它看起来像堆栈溢出用于添加注释的Ajax调用,只返回替换 全部的 评论(不仅仅是新评论)。这样就可以在javascript代码中保存冗余的逻辑,而这些代码必须“知道”HTML是什么样子的。

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

    谢谢!

    编辑: 在我的具体案例中,在此期间不存在添加其他注释的危险——这纯粹是一个最佳实现的问题。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Hollister    16 年前

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

        2
  •  1
  •   FatherStorm    16 年前

    更新所有评论的原因是考虑到其他人可能同时提交的其他评论。要保持网站真正的动态性,您可以这样做,甚至在页面加载时,使用最新提交的注释ID加载一个变量,并设置一个返回的计时器,以检查此后是否有更多注释。如果有,将它们作为JSON对象返回,并将它们一次附加到当前页面的一个DIV中。这将是我处理它的首选方法,因为您可以根据每个DIV的ID或REL来确定操作的目标,这些ID直接与数据库中注释的ID相关…

        3
  •  1
  •   Saul    16 年前

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

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

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

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