2009-12-03 191 views
13

我的Django应用程序显示来自数据库的数据。该数据在没有用户干预的情况下改变,即在幕后。无论什么时候改变,我都希望网页在没有完整页面重新加载的情况下更新已更改的部分。如何更新没有页面重新加载的Django页面?

显然AJAX弹簧想到。当最初加载页面(或者手动加载,稍后完全重新加载)时,呈现的模板加载运行window.onload = update(“all”)的JavaScript,update(...)反过来触发一系列XMLHTTPRequests它再次返回转换为相应部分的HTML片段的数据。一切正常。在初始页面加载。

现在我发现自己在保存新对象到数据库的Python函数。

我如何告诉浏览器运行update()?

我需要以某种方式手动发出映射到这反过来又使得它包含的JavaScript代码运行update(...)模板的视图的URL的请求???天啊!

我觉得我没有按照通常的做法。 也许我只是站在这个问题的前面。

任何人都可以帮助我吗?

回答

6

两种方法的文章:

  1. 只需更新数据库,并等待下一个AJAX查询。这意味着它应该定期执行查询,您必须在即时性和服务器负载之间进行权衡。如果你可以做一个便宜的查询来验证是否有更新,它会有所帮助。可能会使该检查仅依靠memcached而不是去数据库

    • 使用comet。简而言之:客户端会执行一个AJAX查询来请求更新。服务器看到没有更新,所以它不回答。相反,连接会长时间保持打开状态。最终无论是更新还是服务器终于回答,或者客户端超时并终止连接。在这种情况下,客户端应立即重新发出查询以继续等待更新。
+0

感谢你们两位的帮助! :-) 我马上去彗星,看看我能得到它的工作,否则我将不得不定期轮询更新。 – ssc 2009-12-03 02:00:04

+0

这两个答案都非常好,只是将任意一个作为接受的答案。再次感谢! :-) – ssc 2009-12-09 20:09:34

7

你有两个选择

  1. 在使用的setTimeout()的浏览器调查
  2. 查找到彗星 - 这是从服务器将数据推到浏览器的技术。

这里有Comet in Django