我想上传然后在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。
任何人都可以帮忙,或者我是以错误的方式接近这个?
对此有一个跟进问题,我最初更新了这个问题,但更新有足够的不同以保证一个新问题,here。
答案 0 :(得分:2)
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/
希望这有助于实际上我也遇到了相同的prb =)
答案 1 :(得分:0)
:update
选项应该只列出您要更新的div,而不是要评估的Javascript。
Rails助手仍然非常适合这种情况,没有必要编写太多的自定义JS。如果您希望在返回时执行JS,一种简单的方法是呈现RJS模板。如果你想用纯HTML做,只需渲染一个视图(或部分,或直接从render
方法返回进度条的HTML)并将进度条的div放在{{1 } :update
方法的选项。