4

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 に渡すことができるサーバーから正しい応答を取得するのに苦労しています。

誰かが助けることができますか、それとも私はこれに間違った方法でアプローチしていますか?

これにはフォローアップの質問があります。最初にこの質問を更新しましたが、更新は新しい質問を保証するのに十分なほど異なっていました

4

2 に答える 2

2

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/

これが実際に私も同じprbに遭遇したcosに役立つことを願っています=)

于 2008-09-23T10:56:20.360 に答える
0

この:updateオプションには、更新する div のみをリストする必要があり、評価する Javascript は含めないでください。

Rails ヘルパーは、このような状況では依然として非常に優れており、多くのカスタム JS を記述する必要はありません。戻り時に JS を実行したい場合は、RJS テンプレートをレンダリングするのが簡単な方法です。純粋な HTML でそれを行いたい場合は、単にビューをレンダリング (または部分的、またはrenderプログレス バーの HTML を使用してメソッドから直接戻る) し、プログレス バーの div をメソッドの:updateオプションに配置しますperiodically_call_remote

于 2008-09-23T14:06:47.267 に答える