繁体   English   中英

在Rails应用程序上更新服务器端进度

[英]Updating server-side progress on Rails application

我想上传然后在Ruby on Rails应用程序中处理文件。 文件上传通常很短,但是服务器端处理可能需要一些时间(超过20秒),因此我想给用户一些指示-比无意义的“处理中...”屏幕更好。

我正在尝试在视图中使用以下代码

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
                 :frequency => '5',
                 :update => "setProgress('progressBar','5')"
                 ) %>

:update参数的内容是我想每5秒运行一次的javascript

并且以下代码在文件控制器中

def progress_monitor
  render :text => 'whatever'
end

最终,progress_monitor方法将以整数(已完成百分比)的形式返回当前进度,并将其传递到“ setProgress” JavaScript代码中(这将更新屏幕上的元素)

但是,我正在努力从服务器获取正确的响应,然后将其传递到JavaScript中。

任何人都可以提供帮助,还是我以错误的方式处理此问题?

对此有一个后续问题,我最初更新了此问题,但此更新有足够的不同,可以在此处提出新的问题。

periodically_call_remote()更新div 它不会调用您的JavaScript函数。 我不是JavaScript专家,但是要解决您的问题,您应该执行自己的xmlhttp调用。 如果我是你,我会使用原型的AJAX请求

http://www.prototypejs.org/api/ajax/request

并使用JavaScript的settimeout或setinterval进行定期轮询

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

希望这有助于cos,实际上我也遇到过相同的PRB =)

:update选项应该只列出您要更新的div,而没有要评估的Javascript。

Rails的助手在这种情况下仍然非常有用,无需编写很多自定义JS。 如果您希望在返回时执行JS,一种简单的方法是呈现RJS模板。 如果你想用纯HTML做到这一点,只是呈现一个视图(或部分,或者直接从返回render方法与进度条的HTML),并把进度条的DIV中:update了的选项periodically_call_remote方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM