簡體   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