flex PHPに値を渡して結果をflexで出力

2011/08/08

PHPの実行結果をFlex側で出力するサンプル。
PHPファイルの中にある関数に引数を一つわたして、それを出力。

mxmlファイル

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.       xmlns:s="library://ns.adobe.com/flex/spark"
  4.       xmlns:mx="library://ns.adobe.com/flex/mx"
  5.       creationComplete="getPhpFile()">
  6.   <fx:Script>
  7.     <![CDATA[
  8.       private function getPhpFile():void
  9.       {
  10.         var variables:URLVariables = new URLVariables();
  11.         var loader:URLLoader = new URLLoader(request);
  12.         
  13.         // PHPへPOST送信を指定
  14.         var request:URLRequest = new URLRequest("anounce.php");
  15.         request.method = URLRequestMethod.POST;
  16.         
  17.         // PHPに送る内容:関数名と引数
  18.         variables.function_name = "test";
  19.         variables.argument = "reCatNap";
  20.         
  21.         request.data = variables;
  22.         
  23.         // PHPを実行
  24.         loader.addEventListener(Event.COMPLETE, onComplete);
  25.         loader.load(request);
  26.       }
  27.       
  28.       private function onComplete (event:Event):void
  29.       {
  30.         // 戻り値を変数に格納
  31.         var vars:URLVariables = new URLVariables(event.target.data);
  32.         trace( vars.comp );
  33.       }
  34.       
  35.     ]]>
  36.   </fx:Script>
  37.   
  38.   <fx:Declarations>
  39.     <!– Place non-visual elements (e.g., services, value objects) here –>
  40.   </fx:Declarations>
  41.   
  42. </s:Application>

PHPファイル(anounce.php)

  1. <?php
  2.   $function = $_POST['function_name'];
  3.   if ( function_exists($function) )
  4.   {
  5.     // 関数が存在するなら実行
  6.     $function($_POST['argument']);
  7.   }
  8.   
  9.   function test($name)
  10.   {
  11.     echo "comp={$name}";
  12.   }
  13. ?>

実行結果・出力内容?
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=○○」を「変数名と値」に分割。

問題

問題ってほどじゃないけど、これだと複数の引数に対応できない。

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。