ActionScript と PHP の連携

Posted by muchag | ActionScript,PHP | 2010-06-07 (月) 12:46:51

以前 ActionScript の勉強をしたときに書き忘れたので
今更だけど、確認のために書き込み。

おー! できることがわかったときに感動した。
ActionScript と PHP の連携。

LoadVars オブジェクトの sendAndLoad メソッドを使う。

ActionScript

  1. // 送信用LoadVarsオブジェクトのインスタンスを生成
  2. var send_lv:LoadVars = new LoadVars();
  3. // 受信用LoadVarsオブジェクトのインスタンスを生成
  4. var recv_lv:LoadVars = new LoadVars();
  5. // 受信が完了した際に呼び出されるイベントハンドラメソッド
  6. recv_lv.onLoad = function(success){
  7.    //ロードした後の処理
  8.    if (success) {
  9.        trace(reply); < - 山田 太郎 と表示されれば成功
  10.    } else {
  11.        trace("error");
  12.    }
  13. };
  14. // 送信パラメータを送信用LoadVarsインスタンスのプロパティに設定
  15. send_lv.id=8;
  16. send_lv.first_name = "太郎";
  17. send_lv.family_name = "山田";
  18. // 送信実行
  19. send_lv.sendAndLoad("http://www.example.co.jp/hoge/sample.php", recv_lv, "POST");&#91;/as]
  20.  
  21. こうしておいて、PHP 側では
  22.  
  23. &#91;php]// 引数の受け取り
  24. $id = $_POST&#91;"id"];
  25. $first_name = $_POST&#91;"first_name"];
  26. $family_name = $_POST&#91;"family_name"];
  27.  
  28. // 処理を実行
  29. $name = $first_name . " " . $family_name;
  30.  
  31. // 結果を返信
  32. echo "&reply=".$name."&";&#91;/php]
  33. これで基本的な連携は完成。
  34.  
  35. では、覚書をいくつか。
  36.  
  37. <span>
  38. <div class="flow1">AS</div>
  39. 2行目と4行目 LoadVars オブジェクトのインスタンス生成。
  40. [as]// 送信用 LoadVars オブジェクトのインスタンスを生成
  41. var send_lv:LoadVars = new LoadVars();
  42. // 受信用 LoadVars オブジェクトのインスタンスを生成
  43. var recv_lv:LoadVars = new LoadVars();

インスタンスは1つでも可能のようである。
実際いくつかのサイトでは1つで処理をしているが
せっかくなので2つ用意した。

ただ、多くのサイトでインスタンス名の後ろに _lv というsuffixが付いている。
これはなんだろう・・・。

あ、そうか LoadVards オブジェクトの接尾辞か。 🙂

15~17行目

ActionScript

  1. // 送信パラメータを送信用LoadVarsインスタンスのプロパティに設定
  2. send_lv.id=8;
  3. send_lv.first_name = "太郎";
  4. send_lv.family_name = "山田";

送信用オブジェクトのプロパティを自由に設定して
そこに値を与えてやることで、PHP へ引数の受け渡しができる。

19行目

ActionScript

  1. // 送信実行
  2. send_lv.sendAndLoad("http://www.example.co.jp/hoge/sample.php", recv_lv, "POST");

ここでsendAndLoadメソッドを使うわけだが、書式は

ActionScript

  1. public sendAndLoad(url:  String , target:  Object , [method:  String ]) : Boolean


引用元:ActionScript 2.0 リファレンスガイド > ActionScript クラス > LoadVars > sendAndLoad (LoadVars.sendAndLoad メソッド)
となっている。

多くのサイトでurlは絶対パスになっているが
今回相対パスでも成功した。

targetは、結果が戻ってくる先のオブジェクトインスタンスである。

methodは、”GET”と”POST”が選べて、デフォルトは”POST”である。省略可。

●参考
今回は PHP 処理にて毎度 XML ファイルを生成し、それを読み込む処理なので
PHP ファイルを読み込む(呼び出す)流れになったが、
予めXMLファイルが用意されている場合は

ActionScript

  1. public sendAndLoad(url:  String , resultXML:  XML ) : Void

引用元:ActionScript 2.0 リファレンスガイド > ActionScript クラス > XML > sendAndLoad (XML.sendAndLoad メソッド)
というのもあるようだ。

PHP

こちらは、まぁ単純なコードなわけだけど
問題は AS へ結果を戻すとき

  1. // 結果を返信
  2. echo "&reply=".$name."&";

echo または print 文を使うことで値を返信することができ
変数名の前に&(アンパサンド)、最後にも&を付ける。

この際、文字コードの問題が面倒だそうで
Flash の文字コードは”UTF-8″なので
サイトや DB の文字コードによっては、一工夫必要かもしれない。

ちなみに

  1. header("Content-type: text/plain");
  2. echo "&reply=".$reply."&";

このような記述を勧めているサイトもあった。
引用元:にゃあプロジェクト LoadVars.sendAndLoadでPHPと連携
この引用に付き、引用元サイト管理人の方よりコメントをいただいています↓

参考元:Web技術/Flash + PHP

ActionScript,PHP | 2010-06-07 (月) 12:46:51 |

2 Comments »

  1. Comment by ひろゆき — 2010/9/20 月曜日 @ 12:59:01

    「変数名の前に&(アンパサンド)、最後にも&を付ける。」のは、AS2.0的なやり方で、
    AS3.0の場合、エラーが出てしまうかもしれません。

  2. Comment by muchag — 2010/11/6 土曜日 @ 18:45:08

    なるほど、そういうことなのですね。

    AS2とAS3で異なる部分がたくさんあって
    わからないことが一杯です。

    わざわざ
    大変貴重なコメントをいただき
    ありがとうございました。

RSS feed for comments on this post. TrackBack URI

Leave a comment