我的Django应用程序显示数据库中的数据。该数据在没有用户干预的情况下改变,即在幕后。每当它发生变化时,我都希望网页更新已更改的部分,而不会重新加载整页。
很明显,AJAX会浮现在脑海中。当最初加载页面(或手动,稍后完全重新加载)时,呈现的模板加载运行window.onload = update(“all”)的JavaScript,update(...)依次触发多个XMLHTTPRequests它再次返回转换为相应部分的HTML片段的数据。一切正常。在初始页面加载时。
现在我发现自己处于一个将新对象保存到数据库的Python函数中。
如何告诉浏览器运行更新(...)?
我是否需要以某种方式手动向映射到视图的URL发出请求,而该视图又呈现包含JavaScript代码的模板以运行更新(...)???哦,我的!
我觉得我不遵循通常的做法。 也许我只是站在问题面前关闭。
任何人都可以帮助我吗?
答案 0 :(得分:7)
您有两个选择
这是关于Comet in Django
的文章答案 1 :(得分:6)
两种方法:
只需更新数据库并等到下一个AJAX查询。这意味着它应该定期进行查询,你必须在即时性和服务器负载之间取得平衡。如果你可以做一个便宜的查询来验证是否有更新,它会有所帮助。也许让检查只依靠memcached而不是去DB
使用comet。简而言之:客户端执行AJAX查询以请求更新。服务器看到没有更新,所以它没有回答。相反,连接保持打开很长时间。最终,更新到来,服务器最终应答,或者客户端超时并终止连接。在这种情况下,客户端应立即重新发出查询以继续等待更新。
答案 2 :(得分:0)
您也可以使用 Websocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API。使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。