2010年7月23日

AS3 + JSON 的應用

這算是這個blog的開山文章,其實之前就有想要開個blog來分享一些東西了不過腦袋裡一堆想法不知道寫才好,最後都選擇了放棄;想想這樣下去也不是辦法,所以就找了個一個比較簡單點的主題來分享。

JSON (JavaScript Object Notation),是一個輕量型的資料交換格式,在這邊就不做詳細的介紹,有興趣的人可以到wiki去看看。



再開始之前,會需要AS3的JSON code,可以到 Adobe提供的 class libs去下載 ,Link

以下的範例 是以 PHP 為後台程式處理。
PHP 傳值給 AS:
php result.php
$arr[] = array("name"=>"測試員","age"=>"21");
$arr[] = array("name"=>"測試員1","age"=>"22");
$arr[] = array("name"=>"測試員2","age"=>"23");
$arr[] = array("name"=>"測試員3","age"=>"24");
echo json_encode( $arr );
as
import com.adobe.serialization.json.JSON;

var request:URLRequest = new URLRequest();
request.url = "result.php";
request.method = URLRequestMethod.POST;
request.contentType = URLLoaderDataFormat.TEXT;

var myLoader:URLLoader = new URLLoader();
myLoader.addEventListenter(Event.COMPLETE , onLoadCompleted );
myLoader.load( request );

function onLoadCompleted ( e:Event ):void{
    var mydata:Array = JSON.decode( e.target.data );
    trace( mydata.length ); //output:4 
    trace( mydata[0].name , mydata[0].age);//output:測試員,21 
}

AS 傳送資料給 PHP:
as
import com.adobe.serialization.json.JSON;
var myVar:URLVariables = new URLVariables();
var mydata:Array = [{name:"測試者",age:"21"}];
myVar.postData = JSON.encode( mydata );

var request:URLRequest = new URLRequest();
request.url = "echo.php";
request.method = URLRequestMethod.POST;
request.data = myVar;

navigateToURL( request , "_blank" );

php echo.php
$data = $_POST['postData'];
$arr = json_decode( $data );
echo "undecode data:".$data;//output:   undecode data: [{"age":"21","name":"測試者"}]
echo "decode data:" . $arr;//output: decode data:Array
echo "data's name:". $$arr[0]->name;//output:  data's name:測試者
echo "data's age:". $$arr[0]->age;//output:  data's age:21
這樣的寫法比起xml是不是變的簡潔了許多,在後台就不用在像使用xml需要宣告一個xml的格式去將資料傳回as中,有興趣的人可以嘗試運用在自己的程式當中。

1 則留言:

  1. JSON.decode( e.target.data )
    是一個object 無法轉型成Array
    會報錯
    有試過嗎?

    回覆刪除