![](/img/trans.png)
[英]Monitoring a server-side process on Rails application using AJAX XMLHttpRequest
[英]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.