サーバと通信してみる
Flex・Flashがサーバ側と通信する方法は、幾つかあります。
一番原始的な方法は、Webサーバに対し、GET
/POST
メソッドを用いて、データを送受信することです。これは、普通のHTMLのフォームで「送信」ボタンを押したときに行われるのと同じ処理を、Flex・Flashでも行うやり方です。flash.netパッケージのAPIであるURLLoaderクラス、URLRequestクラスを使います。簡単なサンプルを見てみましょう。
Flexで、ホームページで利用するための単純なゲストブックを作るとしましょう。入力出来るのは、名前とEメールアドレス、感想の3項目です。まずはFlex側のUIを作ります。項目も少ないし、簡単ですね。「送信」ボタンが押されたら、入力されたデータをサーバに送信するようにしてみましょう。その際、入力された名前を「name」、Eメールアドレスは「email」、感想は「comment」として送信します。
URLRequestが、要求を表現するクラスです。要求を送信する宛先URLや渡すパラメータを設定します。URLLoaderが実際の要求を実行するクラスです。要求が成功した時のハンドラ、失敗した時のハンドラなどを登録しましょう。URLLoaderは、デフォルトではGET
メソッドを使って要求を送信しますが、今回はPOST
メソッドを明示的に指定します。
Guestbook.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html"> <mx:Script><![CDATA[ private function buttonClickHandler(e:Event):void { // サーバ側の処理スクリプトのURL const kDestUrl:String = "http://localhost/guestbook/guestbook.php"; var request:URLRequest = new URLRequest(kDestUrl); request.method = URLRequestMethod.POST; var vars:URLVariables = new URLVariables(); vars.name = tiName.text; vars.email = tiEmail.text; vars.comment = tiComment.text; request.data = vars; lblServerResult.text = ""; var loader:URLLoader = new URLLoader(); try { loader.load(request); } catch (error:SecurityError){ trace("リクエスト時にセキュリティエラーが発生しました."); } loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true); loader.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true); } private function onIOError(event:IOErrorEvent):void { trace("IOエラー"); } private function onSecurityError(event:SecurityErrorEvent):void { trace("セキュリティエラー"); } private function onLoadComplete(e:Event):void { var result:String = URLLoader(e.target).data as String; if (result) { lblServerResult.text = result; trace("サーバからのデータのロードに成功しました。受信データ: " + result); } } ]]></mx:Script> <mx:Form width="100%"> <mx:FormItem label="お名前"> <mx:TextInput id="tiName" /> </mx:FormItem> <mx:FormItem label="Eメールアドレス"> <mx:TextInput id="tiEmail" /> </mx:FormItem> <mx:FormItem label="ひとこと"> <mx:TextArea id="tiComment"/> </mx:FormItem> </mx:Form> <mx:HBox width="100%"> <mx:Button label="送信" left="0" click="buttonClickHandler(event)" /> <mx:Label text="サーバからの応答:"/> <mx:Label id="lblServerResult" /> </mx:HBox> </mx:Application>
サーバサイドのスクリプトは以下のようになります。PHPで記述しました。サーバサイドでは、送られてきたパラメータを受け取った後、必要な処理を行います。標準出力に書き出した内容が、結果としてクライアントサイドに渡されます。
<?php if (isset($_POST["name"]) && isset($_POST["email"]) && isset($_POST["comment"])) { $name = $_POST["name"]; $email = $_POST["email"]; $comment = $_POST["comment"]; print "name=$name/email=$email/comment=$comment"; } else { print "error"; }