在Rails应用程序上更新服务器端进度
我想上传并在Ruby on Rails应用程序中处理文件。文件上传通常很短,但服务器端处理可能需要一些时间(超过20秒),所以我想给用户一些指标 - 比无意义的“处理...”屏幕更好。在Rails应用程序上更新服务器端进度
我尝试使用下面的代码视图
<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
:frequency => '5',
:update => "setProgress('progressBar','5')"
) %>
中的内容:更新参数我想每5秒
运行JavaScript和下面的代码是在文件控制器
def progress_monitor
render :text => 'whatever'
end
最终,progress_monitor方法将返回当前进展为一个整数(%完整),并且将被传递到“setProgress” javascript代码(将更新屏幕上的元素)
但是,我很努力地从服务器获得正确的响应,然后可以传递到JavaScript。
任何人都可以帮忙,还是我以错误的方式接近?
有一个后续问题,我原来更新了这个问题,但更新是足够不同的,以保证一个新的问题,here。
periodic_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放入periodically_call_remote
方法的:update
选项中。