BLOG ENTRY

AS3で外部JSONデータ読み込みのカスタムイベント[AS3][JSON]

actionscript3

ActionScript3からPHPへPOST投げて、レスポンスのJSONデータの読み込みが完了したら送出するカスタムイベントを試してみました。

目的としてはこういうことがしたかったわけです。
//あるURLにAS3のあるクラスからPOSTでデータを投げる。
//URL先のPHPでDBから値をとってきてJSONデータをレスポンスとして返す。
//そのJSONデータをAS3側で受け取って、読み込みが完了したらパースしてイベント送出する。
//完了イベント後に別クラスでtrace()する。

PHP側の処理は書くほどのことでもないので(というかめんどくさいので)割愛します。

Main.as
package {
    import flash.display.Sprite;
    public class Main extends Sprite {
        public function Main() {
            var mjl:MyJsonLoader = new MyJsonLoader("★JSONデータのURL★");
            mjl.addEventListener(MyEvent.MY_JSON_LOAD_COMPLETE, onLoadCompleteHandler);
        }
        private function onLoadCompleteHandler(e:MyEvent):void {
            trace(e.type, e.myobj);
            for (var i:int = 0; i < e.myobj.length; i++){
                trace(e.myobj[i].id, e.myobj[i].user_id, e.myobj[i].title, e.myobj[i].host, e.myobj[i].filename, e.myobj[i].created, e.myobj[i].modified);
            }
        }
    }
}

MyEvent.as
package {
    import flash.events.Event;
    public class MyEvent extends Event {
        public static const MY_JSON_LOAD_COMPLETE:String = "my_load_complete";
        public var myobj:Object;
        public function MyEvent(type:String, myobj:Object){
            super(type);
            this.myobj = myobj;
        }
        public override function clone():Event{
            return new MyEvent(type, myobj);
        }
        public override function toString():String{
            return formatToString("MyEvent", "type", "bubbles", "cancelable", "eventPhase", "myobj");
        }
    }
}

MyJsonLoader.as
package {
    import com.adobe.serialization.json.JSON;
    import flash.events.EventDispatcher;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;
    import flash.net.URLRequestMethod;
    import flash.net.URLVariables;
    import flash.system.Security;
    import flash.external.ExternalInterface;

    public class MyJsonLoader extends EventDispatcher {
        private var _page_url:String;
        private var _loader:URLLoader;
        private var _posturl:String;

        public function MyJsonLoader(url:String):void {
            _posturl = url;
        //	Security.loadPolicyFile(_posturl + "crossdomain.xml");
            _get_page_url();
            _send_data();
        }

        private function _get_page_url():void{
            _page_url = String(ExternalInterface.call("function(){return location.href}"));
        }

        private function _send_data():void {
            var vars:URLVariables = new URLVariables();
            vars.url = _page_url; //postデータのキーと値

            var req:URLRequest = new URLRequest();
            req.url = _posturl;
            req.method = URLRequestMethod.POST;
            req.data = vars;

            var loader:URLLoader = new URLLoader (req);
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            loader.addEventListener(Event.COMPLETE, _onLoadJsonComplete);
            loader.load(req); //loadでpostしてレスポンスを受け取る
        }

        private function _onLoadJsonComplete (e:Event):void {
            var json:String = URLLoader(e.currentTarget).data;
            var dataobj:Object= JSON.decode(json); //decode
            dispatchEvent(new MyEvent(MyEvent.MY_JSON_LOAD_COMPLETE, dataobj));
        }
    }
}

おわり。

関連記事

  1. Flex4SDKにas3corelibをインストールしてJSONデータを取得[Flex][AS][JSON]
  2. AS3でXMLファイルの内容を読み込んで出力する[AS3]
  3. DisplacementMapFilterとperlinNoiseで外部画像を変形[AS3]
  4. 外部SWFの埋め込みフォントを読み込み[AS3]
  5. BitmapDataクラスのPerlinNoiseメソッドでエフェクト[AS3][filter]

WRITE COMMENT


(required)


(required)


(required)

MENU

veltica creative of