外部からの XML データ等を読み込むときは URLLoader クラス (livedocs@lab) を使うことができます。
以前紹介した Loader クラスは swf やイメージを主に表示目的でロードするためのクラスでした。Loader クラスの記事を書いていた頃は URLLoader は Loader のサブクラスでしたが、今は独立したクラスになっています。
URLRequest クラスとデータ要求の送信
URLLoader を使ってサーバーにリクエストを送るには、まず URLRequest クラス (livedocs@lab) のインスタンスを作ります。URLRequest のオブジェクトにはリクエスト先の URL やヘッダ情報等が指定できます。
次に、作成した URLRequest オブジェクトを引数として URLLoader の load() メソッドを呼び出します。
var myReq:URLRequest = new URLRequest(); myReq.url = "foo.xml"; // コンストラクタの引数としても指定可能 var myLoader:URLLoader = new URLLoader(); myLoader.load(myReq);
HTTP ヘッダに情報を追加する場合は、項目ごとに URLRequestHeader クラス (livedocs@lab) のインスタンスを作成し、 URLRequestHeader オブジェクトの requestHeaders 属性(Array 型です)に追加します。
var myReq:URLRequest = new URLRequest("foo.xml"); var myRH:URLRequestHeader = new URLRequestHeader("pragma", "no-cache"); myReq.requestHeaders.push(myRH); var myLoader:URLLoader = new URLLoader(); myLoader.load(myReq);
受信したデータの処理
load() を実行してからデータの読み込み処理が終わるまで ActionScript から読み込んだデータにアクセスすることはできません。URLLoader は受信処理を完了すると complete イベントを発生させるので、 complete イベントに対するイベントハンドラ内でデータ操作を行うようにします。読み込まれたデータは URLLoader の data 属性からアクセスすることができます。
myLoader.addEventListener(Event.COMPLETE, completeHandler); myLoader.load(new URLRequest("foo.xml")); private function completeHandler(event:Event):void { trace(myLoader.data); }
参考までに、complete を含め URLLoader がディスパッチするイベントには以下のものがあります。
complete : ダウンロード処理が完了した httpStatus : 返信の HTTP ステータスが判明した ioError : IO エラーによりロード処理が中断した open : ロード処理が開始した progress : ロードを実行中 securityError : 許可されない通信を行おうとした
さて、読み込まれただデータは DataFormat クラス (livedocs@lab) に定義されている3種類のフォーマットのどれかです。URLLoader オブジェクトの dataFormat 属性から値を知ることができます。
- DataFormat.TEXT : String 型 (livedocs@lab) の文字列
- DataFormat.BINARY : ByteArray 型 (livedocs@lab) のバイナリデータ
- DataFormat.VARIABLES : URL エンコードされたフォーム変数を持つ URLVariables オブジェクト
3つ目の DataFormat.VARIABLES フォーマットの際に使用される URLVariables クラス (livedocs@lab) からは名前と値がペアになった連想配列として値を取り出すことができます。
データの送信
サーバにデータを送信する際も上記3種類のフォーマットが使用できます。送信するデータを URLRequest オブジェクトの data 属性にセットすれば、リクエスト時にセットしたデータが送られます。
下の例では変数&値のペアを定義した URLVariables オブジェクトを POST で送信しています。この場合、データは x-www-form-urlencoded フォーマットにエンコードされて送られます。
var myVars:URLVariables = new URLVariables(); myVars.userID = "guest"; myVars.password = "foo"; myReq.data = myVars; myReq.url = "ww.sample.com/foo.jsp"; myReq.method = URLRequestMethod.POST; myLoader.load(myReq);
送信方法 (GET/POST)は URLRequest オブジェクトの method 属性に URLRequestMethod クラス (livedocs@lab) に定義された値を使って指定します。デフォルトは GET です。POST する場合はデータの MIME タイプを URLRequest オブジェクトの contentType 属性に設定することができます。 ByteArray オブジェクトを送信する場合は GET は使用できません。
コメントする