ひっと

ActionScript サーバーと通信する

~ Flashアプリ、ゲームのためのAS3サンプルプログラム集 ~

サーバーと通信する


サーバーのURLにデータをPOSTして、結果を受け取ります。


巷のサンプルではLoadVarsとSendAndLoadを使った方法が圧倒的ですが、
なぜか私のところではコンパイルすらできないので別の方法でやってみました。

package
{
    import flash.display.*;
    import flash.text.*;
    import flash.ui.Keyboard;
    import flash.net.*;
    import flash.events.*;

    public class Main extends Sprite
    {
        private var t_in:TextField = new TextField();
        private var t_out:TextField = new TextField();

        public function Main()
        {
            //入力側テキストフィールド
            t_in.text = "テキストを入れてEnterキーを押して下さい";
            t_in.maxChars = 25;//25文字まで
            t_in.x = 10;
            t_in.y = 10;
            t_in.width = 300;
            t_in.height = 20;
            t_in.type = TextFieldType.INPUT;
            t_in.background = true;
            t_in.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown);
            addChild(t_in);

            //出力側テキストフィールド
            t_out = new TextField();
            t_out.x = 10;
            t_out.y = 50;
            t_out.width = 300;
            t_out.height = 20;
            t_out.text = "するとこっちにサーバーで処理した結果が表示されます"
            t_out.background = true;
            t_out.backgroundColor = 0xAAAAAA;
            addChild(t_out);
        }

        public function OnKeyDown(e:KeyboardEvent):void
        {
            if ( e.keyCode == Keyboard.ENTER ) {

		//入力したテキストをsample.phpに送る
		//変数名を"myMessage"としてPOST
                var myRequest:URLRequest = new URLRequest("./sample.php");
                myRequest.method = URLRequestMethod.POST;
                myRequest.data = new URLVariables();
		myRequest.data.myMessage = t_in.text;

                var myLoader:URLLoader   = new URLLoader();
                myLoader.addEventListener(Event.COMPLETE, onComplete);
                myLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
                myLoader.load(myRequest);

                function onComplete (eventObject:Event):void
                {
                    //成功した。phpで処理した結果が受け取れる。
                    t_out.text = eventObject.target.data;
                }

                function onError(e:IOErrorEvent):void {
                    //エラーの時はここが呼ばれる。
                    t_out.text = "えらーです";
                }

            }
        }

    }

}


sample.php
POSTを受け取って適当に加工して表示します。

 <?php
 header("Content-type: text/plain");

 //POSTされた文字から危険な文字を取り除きます。
 $msg = htmlspecialchars($_POST["myMessage"],
                         ENT_QUOTES,
                         mb_internal_encoding() );

 //処理するのは25文字まで。
 if( mb_strlen( $msg,"UTF-8" ) <= 25 ) {
 	echo "サーバーが「". $msg. "」を受け取りました。";
 }

 ?>

予想だにしない文字入力をされて変な挙動をしないよう厳密にチェックしておきたいです。
文字化けしていたらPHPファイルをUTF-8で保存するときっと直ります。
目次へ
52888