この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
ご無沙汰しております。エンジニアの はる です。
前回は「Ruby on RailsとFlash(ActionScript)のXML連携」について、記事を掲載させていただきましたが、今回は、Ruby on RailsとFlash(ActionScript)の”LoadVars.sendAndLoadメソッド”を使用した連携について書いてみたいと思います。
Rails側とFlash側の作業は、
[Rails]テキスト形式の結果を返す。 [Flash]loadVars.sendAndLoadメソッドを使用して、データの送信・受信を行う。
となります。
[Flash(ActionScript)]
#onClick時、Railsアプリに「test=1」「test=2」「test=3」を送信。
#Rails側で処理を行った後、result_lvでレスポンスを受け取ります。
on(release){
var send_lv = new LoadVars();
var result_lv = new LoadVars();
send_lv.sendAndLoad('http://localhost/test/reply?test1=1&test2=2&test3=3',result_lv,"POST");
result_lv.onLoad = function(success:Boolean) {
if (success) {
trace("success");
_root.test1.text=result_lv.test1;
_root.test2.text=result_lv.test2;
_root.test3.text=result_lv.test3;
} else {
trace("error");
}
}
}
[Rails]
#パラメータを受け取り、処理を行った後、レスポンスを返します。
def reply
array = ["one","two","three"]
response.headers["Content-Type"] = 'text/plain; charset=UTF-8'
render :text => "&test1=#{array[params[:test1].to_i]}&test2=#{array[params[:test2].to_i]}&test3=#{array[params[:test3].to_i]}"
end
#viewで返り値を管理したい場合は、以下のように記述します。
def reply2
@array = ["one","two","three"]
response.headers["Content-Type"] = 'text/plain; charset=UTF-8'
render(:text => render_to_string(:partial => 'reply').strip)
end
#_reply.rhtml
&test1=<%=@array[params[:test1].to_i]%>&test2=<%=@array[params[:test2].to_i]%>&test3=<%=@array[params[:test3].to_i]%>
#結果
_root.test1.text => "one"
_root.test1.text => "two"
_root.test1.text => "three"
以上のように、LoadVars.sendAndLoadメソッドを使用することで、前回ご紹介したXML連携よりもだいぶスマートに連携することができます。
大量のデータを読込む場合は、XML連携のほうが便利ですが、解析データ送信したり、クライアントで処理するには重い計算を一度サーバーで行ってからレスポンスだけを返す場合等に有効かと思います。