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