• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sendAndLoadで)

sendAndLoadを利用したphp連携について

このQ&Aのポイント
  • sendAndLoadを利用してphpとの連携を行いたいが、変数のスコープやfunctionの使い方が理解できず困っている。
  • sendAndLoadを使ってphpから返ってきた値をグローバル変数に代入しようとしているが、変数がundefinedになってしまう。
  • phpからの返り値hogehogeをどこでも使えるグローバル変数に渡す方法がわからない。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

単純に 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」になります。 これと同じです。

hige_mario
質問者

補足

回答ありがとうございます。 「なるほど」と思いつつ検証してみたのですが、うまくいってません。僕自身がASの変数の取り扱いを理解できていないせいだと思うのですが。 元の下3行を temp_vars.onLoad = function() { _root.temp_hogehoge = this.hogehoge; trace(_root.temp_hogehoge); } とtraceをfunctionの中に持ち込んでもundefinedになります。これでも読み込み前にtraceしているのかと思い。以降のフレームでloopを作りtemp_hogehogeをtraceし続けてもundefinedが続くだけでした。 お手数をおかけしますが、追加ご指導いただければありがたいです。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#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 側は基本的に同じです。

hige_mario
質問者

お礼

ありがとうございます。解決しました。 BlurFiltanさんの回答を読みやはり組み方としては正しいと信じてスクリプトを念入りに見回して間違いに気が付きました。実際の動作スクリプトでは、戻り値がtextだったため temp_hogehoge = this.hogehoge;を temp_hogehoge.text = this.hogehoge; としていましたが、この.textを取り除いたら正しい反応をしてくれました。前に教えていただいた、traceの実行タイミング不備と変数の指定間違いが組み合わさりはまっていたようです。 ありがとうございました。大変感謝しています。

関連するQ&A

専門家に質問してみよう