feb19.jp blog - life is creative!

AS3でPHPと通信する

ブックマークに追加する tags:     

AS3でPHPと通信する

AS3からPHPにPOSTし、PHPからURLLoaderDataFormat.VARIABLE形式でデータを受け取る、AS2のLoadVars.sendAndLoadな方法。

変数がArrayとかObjectで入れ子になったたりするのではなく、ただただシンプルな文字列の通信。

1. AS3からPHPにデータを送る準備

URLRequest.data = URLVariablesインスタンス;
URLRequest.method = URLRequestMethod.POST;

URLVariablesは、FlashからPHPに対して送る「SENDデータ」を「オブジェクト形式」で入れるもの。これが、PHPにパラメータとして渡されます。
URLRequestMethodは、FlashからPHPに送るときの送信方法。GETか、POST。パラメータが長い文字列になるときは、POSTを使います。GETを使いたいときは、URL以降に「?」
をつけて変数を再利用したいときに使ったりします。というか、PHPとの通信なら基本的にはPOSTですかね?

詳しくはこちらのページで。(「GETとPOST」)


2. 通信

URLLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

URLLoaderインスタンスのデータフォーマットをURLLoaderDataFormat.VARIABLESに。
これで、PHPからデータを受け取れる。(PHPの記述がそうなっていれば)


3. PHPからFlashでデータを受け取る

URLLoaderのEvent.COMPLETEイベントハンドラ内部で、

var urlVariables:URLVariables = new URLVariables(e.target.data);
var obj:Object = new Object();
for (var i:String in urlVariables)
{
	obj[i] = urlVariables[i];
}

こうするとObject型にできる。


4. 一連をクラスにしてみました

package 
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;
	
	/**
	* ConnectPHP
	* @author feb19
	*/
	public class ConnectPHP extends EventDispatcher
	{
		public static const COMPLETE:String = "connectPHP_complete";
		
		private var _result:Object = new Object();
		
		public function ConnectPHP(url:String = null, variables:Object = null)
		{
			if (url && variables)
			{
				sendAndLoad(url, variables);
			}
		}
		public function sendAndLoad(url:String, variables:Object):void
		{
			var urlRequest:URLRequest = new URLRequest(url);
			
			var urlVariables:URLVariables = new URLVariables();
			
			for (var i:String in variables)
			{
				urlVariables[i] = variables[i];
			}
			
			urlRequest.data = urlVariables;
			urlRequest.method = URLRequestMethod.POST;
			
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
			urlLoader.addEventListener(Event.COMPLETE, completeHandler);
			urlLoader.load(urlRequest);
		}
		private function completeHandler(e:Event):void
		{
			var urlVariables:URLVariables = new URLVariables(e.target.data);
			var obj:Object = new Object();
			for (var i:String in urlVariables)
			{
				obj[i] = urlVariables[i];
			}
			
			_result = obj;
			
			dispatchEvent(new Event(COMPLETE));
		}
		public function get result():Object
		{
			return _result;
		}
	}
}


使いかた

PHPに文字列データを送信して、それをPHP側で改造して戻す、通信のサンプル。

送られてきたデータに対して、「っこー!!」という文字列を追加するだけのPHPサンプルです。

unko.php
 
<?php
$unko = $_POST["unko"];
echo "unko=".$unko."っこー!!";
?>

Flash側ではSENDデータをObject型でつくり、ConnectPHPインスタンスのload関数でURLと一緒に引数で渡してやります。

[FLASH] connectPHPExample
 
var sendData:Object = new Object();
sendData.unko = "うんこ";
 
var connectPHP:ConnectPHP = new ConnectPHP();
connectPHP.addEventListener(ConnectPHP.COMPLETE, completeHandler);
connectPHP.load("unko.php", sendData);
 
function completeHandler(e:Event):void
{
	var result:Object = connectPHP(e.currentTarget).result;
	trace(result.unko);	//出力:うんこっこー!!
}

ConnectPHP.COMPLETEイベントの内部でConnectPHP.resultオブジェクトを受け取り、トレースしています。

文字列が頭悪くてすみません。

このクラスの場合、オブジェクトが入れ子になってたりすると分解しきれません。シンプルに入れ子になっていないオブジェクトの受け渡しだけに対応しています。

オブジェクトが入れ子になっている場合にお使いになりたいときは、もうちょいアレコレ改造されて使うと素敵だと思います。

2008年12月02日12:19

Webデザインブログ

「AS3でPHPと通信する」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/162

Navigation

古:英単語速打[eitango-sokuda] タイピングゲーム ブログパーツ
新:A Flash Polyphonic Synthesizer
トップページ

Recently Entries
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...
Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
Flex 用のライブラリとかを見ると mx パッケージとか使われてい...
Flash CS5 を予習 ~Text Layout Framework (TLF) 編~
Text Layout Framework (TLF) を使って、F...