flex PHPに値を渡して結果をflexで出力
PHPの実行結果をFlex側で出力するサンプル。
PHPファイルの中にある関数に引数を一つわたして、それを出力。
- <?xml version="1.0" encoding="utf-8"?>
- <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- creationComplete="getPhpFile()">
- <fx:Script>
- <![CDATA[
- private function getPhpFile():void
- {
- var variables:URLVariables = new URLVariables();
- var loader:URLLoader = new URLLoader(request);
- // PHPへPOST送信を指定
- var request:URLRequest = new URLRequest("anounce.php");
- request.method = URLRequestMethod.POST;
- // PHPに送る内容:関数名と引数
- variables.function_name = "test";
- variables.argument = "reCatNap";
- request.data = variables;
- // PHPを実行
- loader.addEventListener(Event.COMPLETE, onComplete);
- loader.load(request);
- }
- private function onComplete (event:Event):void
- {
- // 戻り値を変数に格納
- var vars:URLVariables = new URLVariables(event.target.data);
- trace( vars.comp );
- }
- ]]>
- </fx:Script>
- <fx:Declarations>
- <!– Place non-visual elements (e.g., services, value objects) here –>
- </fx:Declarations>
- </s:Application>
PHPファイル(anounce.php)
- <?php
- $function = $_POST['function_name'];
- if ( function_exists($function) )
- {
- // 関数が存在するなら実行
- $function($_POST['argument']);
- }
- function test($name)
- {
- echo "comp={$name}";
- }
- ?>
実行結果・出力内容?
reCatNap
めも
「mxmlが読み込まれたら何かをやってPHPを実行。結果をmxmlで何かして出力する」という感じ。
mxmlファイル側
まずは、実行されるタイミングの指定として「creationComplete」を使う(5行目)。
「URLRequest()」にPHPファイルをセットしてオブジェクト(?)作成(14行目)。
「URLVariables()」でPHPに渡したい内容を適当にする。今回は関数名と引数が渡したいから二つ用意する(18・19行目)。
「loader.load」でPHPの実行(25行目)。
PHPの結果が返ってきたら「onComplete()」を実行。中身はただ出力してるだけ(28~33行目)。
「URLVariables()」を使ってるけど使わなくても大丈夫。(31行目)そのときは文字コードの問題で面倒かも。
使っているPCのエンコードで結果が返ってくるらしい。
WindowsならShiftJisっぽい。
PHPファイル側
mxml側でセットした「URLVariables()」の値を取得する。
「function_name」「argument」という名前でセットしたので「$_POST['function_name']」「$_POST['argument']」に入っている。(2行目)
if文で関数名が存在するなら実行。その際は引数をセットしてあげる。(3~7行目)
「echo」で「comp=」とやってるけど、これはmxml側で使いやすくするため。(11行目)
※mxml側の「onComplete()」の「URLVariables()」で「comp=○○」を「変数名と値」に分割。
問題
問題ってほどじゃないけど、これだと複数の引数に対応できない。