ということで、Airで何かアプリケーションを作ってみようと言うことで、 取りあえず作ってみた。
といっても、せっかくなので外部と通信をしなくてはつまらない。 そんなわけで、まずは実験的な意味を含めて自作のPHPとAirで作った プログラムを通信させようというのが今回の目標。
まずは、PHPの方については・・・。 まずは、簡単なサンプルを作成するということで、引数2個を受け取り、 その合計値を返すというプログラムを作ることにした。
もちろん、返却はXMLで行う。
と、ソースはこんな感じ。 特に難しいこともなく、ぐっちゃりとハードコーディング・・・。 1年ぶりのPHPでよくわからなかった。まぁいいか。
<?php
$arg1 = $_REQUEST['arg1']; $arg2 = $_REQUEST['arg2'];
if(is_null($arg1) || is_null($arg2) || !is_numeric($arg1) || !is_numeric($arg2)) { $error = true; } else { $error = false; $value = $arg1 + $arg2; } header("Content-Type: text/xml"); ?> <?xml version="1.0" encoding="UTF-8"?> <Response> <Header> <Args> <?php if(!is_null($arg1) && is_numeric($arg1)) { ?> <Arg name="arg1"><?php print($arg1); ?></Arg> <?php } ?> <?php if(!is_null($arg2) && is_numeric($arg2)) { ?> <Arg name="arg2"><?php print($arg2); ?></Arg> <?php } ?> </Args> <?php if(!$error) { ?> <Result><?php print($value); ?></Result> <?php } ?> <Status><?php if($error){ print("error"); } else { print("ok"); } ?></Status> </Header> </Response>
|
プログラムとしてはとっても簡単だ。 arg1とarg2をGETから受け取り、計算を行いあとは、XMLで返すという だけの簡単なプログラム。
試しに、サーバーに設置を行い確認してみる。 http://hoge.com/api/plus.php?arg1=10&arg2=2
とこのような感じだ 次は、Airのほうだ。 まずはソースを・・・ <?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Button x="130" y="13" label="=" id="exeButton" width="34" click="plainRPC.send();" /> <mx:Text x="172" y="15" width="54" id="ansText"/> <mx:TextInput x="10" y="13" width="45" id="arg1Text"/> <mx:TextInput x="77" y="13" width="45" id="arg2Text"/> <mx:Text x="59" y="17" text="+"/> <mx:Script> <![CDATA[ import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.controls.Alert;
public function handlePlain(event:ResultEvent):void { ansText.text = event.result.Header.Result; }
public function handleFault(event:FaultEvent):void { Alert.show(event.fault.faultString, "Error"); } ]]> </mx:Script>
<mx:HTTPService result="handlePlain(event);" fault="handleFault(event);" id="plainRPC" resultFormat="e4x" url="http://labs.zsrv.net/api/plus.php" useProxy="false"> <mx:request xmlns=""> <arg1>{arg1Text.text}</arg1> <arg2>{arg2Text.text}</arg2> </mx:request> </mx:HTTPService> </mx:WindowedApplication> |
とこのような感じとなった。 注意したい点をとりあえず抜粋してみる。
まずは、後半部分のHTTPリクエストを投げる部分について。 <mx:HTTPService result="handlePlain(event);" fault="handleFault(event);" id="plainRPC" resultFormat="e4x" url="http://hoge.com/api/plus.php" useProxy="false"> <mx:request xmlns=""> <arg1>{arg1Text.text}</arg1> <arg2>{arg2Text.text}</arg2> </mx:request> </mx:HTTPService> |
ここだ。 まずは、<mx:HTTPService>の要素についてだ。 | result="handlePlain(event);" |
これについては、リクエストを投げた後にレスポンスが返ってきた場合に 呼ばれる。つまりはコールバック関数だ。 ソースの上部分に、handlePlain(event)というメソッドが定義されているが、 このメソッドが呼び出される。
また、リクエストについては非同期で処理される。
| fault="handleFault(event);" |
については、リクエストを投げる処理が失敗したときに呼び出される。 これもまたコールバック関数だ。
これは、このリクエストに対するIDだ。 実際にボタンイベントが発生したときにこのIDを使いHTTPリクエストを 起動している。 | <mx:Button x="130" y="13" label="=" id="exeButton" width="34" click="plainRPC.send();" /> |
これは、リクエスト結果をどのようなフォーマットで受け取るかの定義だ。 e4xというのに設定しておくと、返ってきた結果のXMLを「.」でつなぐことで、 値を取得出来るのでとっても楽だ。 (値の取得方法については後述)
urlやproxyについては解説なしで想像つくとおもうので省略。
<mx:request xmlns=""> <arg1>{arg1Text.text}</arg1> <arg2>{arg2Text.text}</arg2> </mx:request> |
これについては、つまりはリクエストを投げる際の引数となる。 つまり、arg1Textとarg2Text(二つともテキストボックス)に設定された 値を引数とし、この引数をURLとくっつけリクエスト投げることになる。
少し上の方に戻る。次は、 public function handlePlain(event:ResultEvent):void { ansText.text = event.result.Header.Result; } |
についてだ。 ここが、リクエストの処理が返ってきたときに呼ばれるコールバック関数 の実態となる。 ここで、結果を受けている。
どのように取得しているかというと引数のeventから、
| event.result.Header.Result; |
という形で受け取っている。 ここで、わかりやすいように先ほど作ったPHPの結果のXMLを下記に書いておく。
<?xml version="1.0" encoding="UTF-8"?> <Response> <Header> <Args> <Arg name="arg1">10</Arg> <Arg name="arg2">5</Arg> </Args> <Result>15</Result> <Status>ok</Status> </Header> </Response> |
となっている。 つまり、結果としては<Result>15</Result>を取得したいわけだ。 XPathで表記すると以下のようになると思う。
これを、Airでは、先ほど書いたとおり<Response>をのぞいた、
| event.result.Header.Result; |
で取得出来ることになる。「event.result」までがAirとしての構文。 「Header.Result」が、XMLの取得先となる。
以上で無事に、AirからPHPのアクセスを行い足し算結果を取得する 事が出来た。
Add as favourites (57) | Quote this article on your site | Views: 2152
|
|
|
|
|
|
|
|
|
|
|
- Please keep the topic of messages relevant to the subject of the article.
- Personal verbal attacks will be deleted.
- Please don't use comments to plug your web site. Such material will be removed.
- Just ensure to *Refresh* your browser for a new security code to be displayed prior to clicking on the 'Send' button.
- Keep in mind that the above process only applies if you simply entered the wrong security code.
|
Powered by AkoComment Tweaked Special Edition v.1.4.6 AkoComment © Copyright 2004 by Arthur Konze - www.mamboportal.com All right reserved |