2008-09-23 58 views
4

我想上傳並在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

回答

2

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 =)

0

:update選項應該只列出你想要更新的div,沒有你想評估的Javascript。

Rails助手仍然非常適合這種情況,因此不需要編寫太多的自定義JS。如果你希望在返回時執行JS,一個簡單的方法是呈現一個RJS模板。如果您希望使用純HTML完成此操作,只需呈現一個視圖(或部分視圖,或者直接從render方法中用進度條的HTML返回),然後將進度條的div放入periodically_call_remote方法的:update選項中。

相關問題