質問

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/

実際に私も同じ状況に遭遇したことがあるので、これが役立つことを願っています =)

他のヒント

:update オプションでは、更新したい div のみをリストする必要があり、評価したい Javascript は含めるべきではありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top