- ベストアンサー
sendAndLoadを利用したphp連携について
- sendAndLoadを利用してphpとの連携を行いたいが、変数のスコープやfunctionの使い方が理解できず困っている。
- sendAndLoadを使ってphpから返ってきた値をグローバル変数に代入しようとしているが、変数がundefinedになってしまう。
- phpからの返り値hogehogeをどこでも使えるグローバル変数に渡す方法がわからない。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
単純に trace(_root.temp_hogehoge); が _root.temp_hogehoge = this.hogehoge; より先に実行されるからだと思いますよ。 そもそもなぜ, temp_vars.onLoad = function() {} などを用意しているのかというと, PHP からの値のロードを待つからでしょう? ロード後でないと値がわからないので変数に値の代入のしようがないからですよね。 というわけで, PHP から値がロードされたときに, temp_vars.onLoad = function() {} の{}内が実行されるわけです。 つまり _root.temp_hogehoge = this.hogehoge; が実行されます。 こう↓考えれば簡単なのでは? // ボタン「myButton」がクリックされたときに実行 myButton.onRelease = function(){ // 変数 AAA に あいうえお という値を代入 AAA = "あいうえお"; }; // AAA の値を出力 trace(AAA); 変数 AAA に値が代入されるのはボタンがクリックされたときです。 一方 trace(AAA); はボタンがクリックされてもされなくても, それを書いたフレームで即実行されます。 したがって trace(AAA); が実行されるときに 変数 AAA は存在しないので 「undefined」になります。 これと同じです。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 temp_vars.onLoad = function() { trace(this.hogehoge); } これが無事に動いているのでしたら, 書かれていらっしゃる temp_vars.onLoad = function() { _root.temp_hogehoge = this.hogehoge; trace(_root.temp_hogehoge); } でOKなはずです。 または _root をはずしてもかまいません。 temp_vars.onLoad = function() { temp_hogehoge = this.hogehoge; trace(temp_hogehoge); } これが無事に動作していないということは, そもそもロードできていなくて変なことになっているからかもしれません。 sendAndLoad は普通「送信用LoadVarsインスタンス」と「受信用LoadVarsインスタンス」が要ります。 「loadVars.sendAndLoad()メソッド。データ送受信」 http://www.1art.jp/flash2/chapter/49/49.htm ↑サンプルのサーバサイド言語は CGI(Perl) ですが, PHP でも ActionScript 側は基本的に同じです。
お礼
ありがとうございます。解決しました。 BlurFiltanさんの回答を読みやはり組み方としては正しいと信じてスクリプトを念入りに見回して間違いに気が付きました。実際の動作スクリプトでは、戻り値がtextだったため temp_hogehoge = this.hogehoge;を temp_hogehoge.text = this.hogehoge; としていましたが、この.textを取り除いたら正しい反応をしてくれました。前に教えていただいた、traceの実行タイミング不備と変数の指定間違いが組み合わさりはまっていたようです。 ありがとうございました。大変感謝しています。
補足
回答ありがとうございます。 「なるほど」と思いつつ検証してみたのですが、うまくいってません。僕自身がASの変数の取り扱いを理解できていないせいだと思うのですが。 元の下3行を temp_vars.onLoad = function() { _root.temp_hogehoge = this.hogehoge; trace(_root.temp_hogehoge); } とtraceをfunctionの中に持ち込んでもundefinedになります。これでも読み込み前にtraceしているのかと思い。以降のフレームでloopを作りtemp_hogehogeをtraceし続けてもundefinedが続くだけでした。 お手数をおかけしますが、追加ご指導いただければありがたいです。