flashからサーバサイドへのリクエスト
最近聞かれることが多いので
AS2.0と3.0の2本立て
まず, 最初に簡単な概要
flashからアクセスするといってもサーバサイドでやることは変わらない
リクエストを送信し, レスポンスとしてHTMLを返す. それだけ
ただ, リクエスト送信とHTMLの解析がブラウザかflashかの違いだけである
ただし, 異なる部分はflashが受け取ったHTMLはXMLとして解析するということと
それを解析するプログラムも実装する必要があるということである.
したがって, 単純にUIをRIA化するためだけにflash部分のみを新規実装するといった開発も可能だし, flashで処理するのに必要な値だけを非HTMLで返すことも可能である.
リクエストのパラメータについて
Webアプリケーションの開発経験がある方ならご存知だろうがクライアントからリクエストを送信する際に追加情報を送ることができる.
たとえばログイン画面のようなものであればログイン後の画面要求とともにIDやメールアドレス, パスワードのようにログイン認証に必要な情報も送る.
このパラメータが
パラメータ名とその値が一対一の対応関係になっているためサーバサイドではハッシュマップで扱われることが多い
flashから送る際もパラメータと値を対で送る.
ではソース
まずはAS3バージョン
//リクエスト
var req:URLRequest = new URLRequest();//リクエストにアクセス先を設定
//相対パスでもおk
req.url = "http://neetomo.dip.jp/";//送る方法をPOSTに設定
req.method = URLRequestMethod.POST;//送る変数を設定
//URLVariablesのプロパティに値を設定する
//プロパティ名がリクエストのパラメータ名に対応
var uv:URLVariables = new URLVariables();
uv.FirstName = "流離の";
uv.LastName = "苦情人";//リクエストにパラメータを設定
req.data = uv;//外部にアクセスするための変数
var loader:URLLoader = new URLLoader();//サーバにアクセスした後, レスポンスが帰ってきた時に行う処理をを第2引数で指定
//この際に処理を行うメソッドを指定すること
loader.addEventListener(Event.COMPLETE, onComplete);//サーバにリクエストを送信する
loader.load(req);//サーバ側から戻ってきた値を処理するメソッド
private function onComplete(e:Event):void {
//サーバから帰ってきたHTMLをXMLとして処理する
var loader:URLLoader = e.currentTarget as URLLoader;
var xmlData:XML = XML(loader.data);//xmlDataに値が入ってる
//ここで各コンポーネントに値を設定したりなどの処理を行う
}//String firstNmae = (String)request.getParameter("FirstName");
//のようにJSPのFormから値を送った時と同じ方法で取得
次にAS2.0バージョン
//結果を受け取るXML変数
var resultXML:XML = new XML();//アクセス先
var url:String = "http://neetomo.dip.jp/";//リクエストを送る変数
var lv:LoadVars = new LoadVars();//リクエストのパラメータに設定する値
lv.FirstName = "流離の";
lv.LastName = "苦情人";//リクエストを送信
//第一引数 -> アクセス先のURL
//第二引数 -> 結果を入れる変数(レスポンスとして帰ってきたHTMLをXMLとして処理する)
lv.sendAndLoad(url, resultXML, "POST");//レスポンスが帰ってきたときに処理される関数
resultXML.onLoad = function (success) {
//resultXMLにxmlのデータが入っているのでthisを使って取得
//ここで各コンポーネントに値を設定したりなどの処理を行う
}
なお, 今回はレスポンスとして取得したXMLの処理方法については触れていないが
通常のflashでそれを扱うのとやり方は一緒なので割愛させてもらう.