読者です 読者をやめる 読者になる 読者になる

Now loadingボタンを表示させたい

Ruby Rails Ajax

何秒かかかる若干重い処理をAjaxでする場合に、
反応が全くないのは不安になります。
バックグラウンド処理をしている間にNow Loading !
なアイコン
でもあるといい感じです。
まず、link_to_remoteでnowloadingコントローラを呼び出し、
そのrjsからshoriコントローラを呼び出すこととします。
最初にリンクボタンと処理結果を用意します。

まず、処理ボタンと結果を入れる部分を用意します。

<%=link_to_remote "重い処理",:url=>{:action=>"nowloading"}%>
<div id="result"></div>

nowloadingコントローラの中は空です。

def load_generate_all_ajax    
end

nowloading.rjsはnowloading.gifボタンを表示し、
実際の処理部分のコントローラを呼びます。

page.replace_html(:result,image_tag("nowloading.gif"))
page<< "function call_shori(){
new Ajax.Request('/tekitou/shori', {asynchronous:true, evalScripts:true}); return false;
}"
page.call("call_shori")

shoriコントローラは実際の処理をします。

def shori
  # 処理いろいろで表示用の結果を@strに入れる
  @str=result
end

shori.rjsは結果を表示する

page.replace_html(:result,"<textarea rows='20' cols='50'>#{@str}</textarea>")

こうするとぐるぐる回ってから処理が終わってから
結果が表示されて、超かっこいいです。
私の場合、結果が長いのでtextareaで囲いました。