研究室生活のメモ・・・だった過去の遺産。移転先→http://negimochix2.blogspot.com/
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
GDP企画の際必要になった,ActionScriptを使ったXMLの送受信.
Flash/AIRとPHP間でXMLのやりとりをするのに使った.
試行錯誤した結果,結局こんな感じでうまくいくことがわかった.
基本的に,URLRequestで送信データ,およびその設定を行い,
URLLoaderでリクエスト(送信),Completeイベントでphpからのレスポンスが帰ってくる仕組み.
当初,Content-typeを"application/octet-stream"(バイナリデータの意)として,
XMLをBinaryArrayで送っていたけど,
それだと送信先でヘッダーに文字化けが起きる.
ちなみに,PHP側では,
生データを丸ごと読みこんでPHPのXMLクラスに変換.
Flash側に送りたいXMLは,PHP自身にタグをprintすればいい.
Flash/AIRとPHP間でXMLのやりとりをするのに使った.
試行錯誤した結果,結局こんな感じでうまくいくことがわかった.
基本的に,URLRequestで送信データ,およびその設定を行い,
URLLoaderでリクエスト(送信),Completeイベントでphpからのレスポンスが帰ってくる仕組み.
package { import flash.events.Event; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; import flash.events.EventDispatcher; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.utils.ByteArray; /** * ConnectPHP * @auther kusamochi */ public class ConnectPHP extends EventDispatcher { public static const COMPLETE:String = "complete"; public static const IO_ERROR:String = "io_error"; public static const PROGRESS:String = "progress"; public static const FAILED:String = "failed"; private var _urlRequest:URLRequest; private var _result:XML; private var urlLoader:URLLoader; // コンストラクタ public function ConnectPHP() { } // XMLの送信 public function sendAndLoad_XML(url:String, xml:XML):void { // 送信するデータを設定 _urlRequest = new URLRequest(url); _urlRequest.contentType = "text/xml"; _urlRequest.data = xml.toXMLString(); // データはPOSTで送信 _urlRequest.method = URLRequestMethod.POST; // URL urlLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; // イベントリスナー登録 urlLoader.addEventListener(Event.COMPLETE, completeHandler); urlLoader.addEventListener(ProgressEvent.PROGRESS, progressHandler); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); urlLoader.load(_urlRequest); } // データロード完了のイベントリスナー private function completeHandler(event:Event):void { urlLoader.removeEventListener(Event.COMPLETE, completeHandler); urlLoader.removeEventListener(ProgressEvent.PROGRESS, progressHandler); urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); // reusltに格納 try { _result = new XML(event.target.data); } catch(error:TypeError) { // イベントをブロードキャスト dispatchEvent(new Event(FAILED)); return; } // イベントをブロードキャスト dispatchEvent(new Event(COMPLETE)); } // 送信中に一定間隔で発生するイベントリスナー private function progressHandler(event:ProgressEvent):void { // イベントをブロードキャスト dispatchEvent(new ProgressEvent(PROGRESS)); } // 送信エラーのイベントリスナー private function ioErrorHandler(event:IOErrorEvent):void { urlLoader.removeEventListener(Event.COMPLETE, completeHandler); urlLoader.removeEventListener(ProgressEvent.PROGRESS, progressHandler); urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); // イベントをブロードキャスト dispatchEvent(new IOErrorEvent(IO_ERROR)); } // 参照削除 public function deleteReference():void { if(urlLoader) { urlLoader.addEventListener(Event.COMPLETE, completeHandler); urlLoader.addEventListener(ProgressEvent.PROGRESS, progressHandler); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); urlLoader.close(); } _urlRequest = null; _result = null; } // getter ////////////////////////////////////////////////////// // result public function get result():XML { if(_result) return _result; else return null; } } }ポイントは,Content-typeを"text/xml"にして,xmlのStringを送信すること.
当初,Content-typeを"application/octet-stream"(バイナリデータの意)として,
XMLをBinaryArrayで送っていたけど,
それだと送信先でヘッダーに文字化けが起きる.
ちなみに,PHP側では,
$inputStr = file_get_contents("php://input"); $xml = simplexml_load_string($inputStr); print "<result>"; // Flash側に送りたいデータをほげほげ print "</result>";というように,file_get_contents("php://input")で,
生データを丸ごと読みこんでPHPのXMLクラスに変換.
Flash側に送りたいXMLは,PHP自身にタグをprintすればいい.
PR
この記事にコメントする
Infomation
【中の人】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー
【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@
【その他やってるもの】
・Twitter
・これは痛いピアプロ
・過去の遺産smart.fm
【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
・これは痛いピアプロ
・過去の遺産smart.fm
【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
カテゴリー
VOCALOID Ranking Watcher
新曲は常にチェックすべし。
おすすめ記事
jubeat ripples
今更やってみる
最新記事
(05/02)
(01/08)
(11/26)
(11/24)
(11/13)
(11/06)
(11/06)