我有一个由浏览器调用的“长”任务。我想做的是创建一个动态进度条,在同一页面或灯箱中显示“幕后”任务的进度(不刷新页面)。
我的想法是使用这样的 JQuery 栏:http: //docs.jquery.com/UI/API/1.8/Progressbar
我的问题是:
如何从任务(在 lib/ 中)调用 JQuery(或一般视图)来更新栏?
仅供参考,我也使用 ActiveAdmin,这不仅仅是问题,因为它使用预编译视图。
我有一个由浏览器调用的“长”任务。我想做的是创建一个动态进度条,在同一页面或灯箱中显示“幕后”任务的进度(不刷新页面)。
我的想法是使用这样的 JQuery 栏:http: //docs.jquery.com/UI/API/1.8/Progressbar
我的问题是:
如何从任务(在 lib/ 中)调用 JQuery(或一般视图)来更新栏?
仅供参考,我也使用 ActiveAdmin,这不仅仅是问题,因为它使用预编译视图。
我会在控制器中创建一个新的 REST 操作(或理想情况下重用现有的操作)来为进度条提供信息。
而且我还会尝试每隔一段时间使用 JQuery 使用 Ajax 调用控制器。
我认为这种面对进度条实现的方式比从 lib 任务中调用视图更好。
像这样的东西:
$(function() {
setInterval(updateProgressBar, 1000);
});
function updateProgressBar() {
//Invoke controller with ajax, and update progressBar
}
如果您不喜欢在客户端玩轮询,您可能会在 HTML5 中找到有趣的服务器事件。
这是不久前的帖子,但如果它对某人有帮助,那么有一个宝石可以做到这一点。它似乎不再被维护,但它是如何实现所请求行为的一个很好的例子: