代码之家  ›  专栏  ›  技术社区  ›  ssc

如何在不重新加载页面的情况下更新django页面?

  •  13
  • ssc  · 技术社区  · 15 年前

    我的django应用程序显示数据库中的数据。这些数据在没有用户干预的情况下发生变化,即在幕后。每当它更改时,我希望网页在不重新加载整页的情况下更新更改的部分。

    显然,阿贾克斯想到了。当页面最初加载(或手动加载,稍后完全重新加载)时,呈现的模板加载一个运行window.onload=update(“all”)、update(…)的javascript,然后触发许多xmlhttpRequests,这些请求再次返回转换为相应部分的HTML片段的数据。一切正常。在初始页面加载时。

    现在我发现自己在一个python函数中,该函数将一个新对象保存到数据库中。

    如何告诉浏览器运行更新(…)?

    我是否需要以某种方式手动向一个URL发出一个请求,该URL映射到一个视图,该视图反过来呈现一个包含要运行更新(…)的javascript代码的模板????哦,我的天哪!

    我觉得我没有遵循通常的方法。 也许我只是站在问题的最前面。

    有人能帮我吗?

    2 回复  |  直到 6 年前
        1
  •  6
  •   Fabs Bradley Robinson    6 年前

    两种方法:

    1. 只需更新数据库并等待下一个Ajax查询。这意味着它应该定期进行查询,您必须在即时性和服务器负载之间取得平衡。如果你能做一个便宜的查询来验证是否有更新,这会有点帮助。也许检查只依赖memcached而不是数据库

    2. 使用 comet . 简而言之:客户机执行一个请求更新的Ajax查询。服务器发现没有更新,所以没有响应。相反,连接保持打开很长时间。最终,要么更新到服务器最终响应,要么客户机超时并终止连接。在这种情况下,客户机应该立即重新发出查询以继续等待更新。

        2
  •  7
  •   Lou Franco    15 年前

    你有两个选择

    1. 使用setTimeout()进行浏览器投票
    2. 研究Comet——这是一种将数据从服务器推送到浏览器的技术。

    这是一篇关于 Comet in Django