如何在没有页面重新加载的情况下更新Django页面?

时间:2009-12-03 00:20:56

标签: javascript python ajax django

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

很明显,AJAX会浮现在脑海中。当最初加载页面(或手动,稍后完全重新加载)时,呈现的模板加载运行window.onload = update(“all”)的JavaScript,update(...)依次触发多个XMLHTTPRequests它再次返回转换为相应部分的HTML片段的数据。一切正常。在初始页面加载时。

现在我发现自己处于一个将新对象保存到数据库的Python函数中。

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

我是否需要以某种方式手动向映射到视图的URL发出请求,而该视图又呈现包含JavaScript代码的模板以运行更新(...)???哦,我的!

我觉得我不遵循通常的做法。 也许我只是站在问题面前关闭。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:7)

您有两个选择

  1. 使用setTimeout()
  2. 进行浏览器轮询
  3. 查看Comet - 这是一种将数据从服务器推送到浏览器的技术。
  4. 这是关于Comet in Django

    的文章

答案 1 :(得分:6)

两种方法:

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

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

答案 2 :(得分:0)

您也可以使用 Websocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API。使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。

相关问题