在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选项中。