- 締切済み
受け取った値が"undefined"と表示されてしまう。
QNo.2601015で質問させて頂いた者なのですが、 もう一つ理解出来ない事がありましたので 再度質問させて頂きます。 変数1(value1)と変数2(value2)があり、それらを入力して ボタンを押すと、変数1+変数2の結果がPHP側で処理され、Flash側のtraceで出力される単純なプログラムを作成しています。 みなさんのお力で なんとかFlash側でデータを受け取るところまでは いけたのですが、受け取った値が”undefined”となってしまいます。 undefinedとは変数が未定義である時に表示されるのですよね? ソースのミスはないと思うのですが。。 下記がソースです。何度もすみませんが、よろしくお願いします。 //Flash側 on (release) { formData = new LoadVars () ; formData.value1 = value1 ; formData.value2 = value2 ; /受信用 receiveData = new LoadVars () ; receiveData.onLoad = function(){ trace(receiveData.sum) ; } formData.sendAndLoad("http://localhost/phptest.php", receiveData, "GET") ; } //PHP側 <?php $sum = $HTTP_GET_VARS['value1'] + $HTTP_GET_VARS['value2'] ; echo ('sum=' . $sum); ?> 環境: windows XP , XAMPP, DREAMWEAVER8,FLASH8, IE6
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 すみません。 大分遅くなってしましました。 そして, > formData と receiveData が逆では? という寝ぼけたことを書いて申し訳ございませんでした。 ===================== 今,ふと気づいたのですが。 > php側ではsum = 7 と出るのでphpの方も問題はないと思います。 ここの,「sum = 7」は手で入力されたものですか? それとも, 実際に出力されたものをコピペで貼り付けたものですか? なんでこんな変なことを聞くかというと,スペースが気になったのです。 「sum=7」←スペース無し こうでないといけませんよ。 ===================== 私は何も言ってないのに,自己解決され, 勝手に感謝されて,大変申し訳ない思いのご質問があるのです。 「PHPからデータをFlash(swf)に送りたいのですが」 http://oshiete1.goo.ne.jp/qa2628834.html ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/qa2628834.html たった今, 「補足」と「お礼」があったことに気づいて, 返事ができなかったことに反省しながら「お礼」を読ませていただいていたのですが, そのお礼にありますように, > 下記のような記述をしました。 > echo '&name2=.$name2.'&'; これで解決されたそうです。 シングルクォーテーション(')が3つあるという, 私にとっては非常に理解しがたいプログラムなのですが, これは, '文字列' という意味ではなくて 'エスケープ という意味なのでしょうかね...??? よくわかりませんが, エスケープシーケンスの意味であれば,シングルクォーテーションが3つあるという意味がわかります。 「&」 と 「;」 をエスケープしているのでしょう。 本題はそれではなくて, 「name2=.$name2」 スペースが入っていませんよ。 このスペースの有無が実際の表示にどう影響するのかわかりませんが, プレーンな外部テキストをFlashにロードさせるときは, スペースも文字扱いになるので, 不要なスペースは入れてはならないのです。 例えば複数の変数と値を送信する場合, こうしないとなりません↓。 name1=ABCD&name2=EFGH&name3=IJKL スペースは一切無しです。 また,変数ごとに改行を入れたい場合は こうなります↓。 name1=ABCD& &name2=EFGH& &name3=IJKL なぜ,ABCD のあとに & があるかというと, & を入れておかないと改行コードまで値扱いになるからです。 例えばこれ↓だと, name1=ABCD &name2=EFGH こういう↓扱いになるのです。 name1=ABCD↓&name2=EFGH name1 の値は ABCD ではなくて ABCD↓ (↓は改行コードの意味)になってしまいます。 これで誤作動を起こす場合があります。 例えばこうしておくと↓, name1=ABCD& &name2=EFGH& こういう↓扱いになるのです。 name1=ABCD&↓&name2=EFGH& 改行コードはどちらにしてもデータ内に入ってしまいますが, name1 の値は ABCD になります。 つまりそれくらいシビアなのです。 また,見当はずれなことを書いているかもしれませんが, 気になったので,遅くなりましたが,回答させていただきました。
なにしろ PHP はダメな者ですが, (なぜダメかというと,わからない上に,検証する環境を持っていない....。) formData と receiveData が逆では? formData.sendAndLoad("http://localhost/phptest.php", receiveData, "GET") ; ↓ 変更? ↓ receiveData.sendAndLoad("http://localhost/phptest.php", frormData,"GET") ; あと, trace をたくさん入れてみて, どこで undefined になるのか確かめてみられたら, 原因に近づけると思います↓。 //Flash側 on (release) { trace("A:value1=" + value1 + ",value2=" + value2); formData = new LoadVars () ; formData.value1 = value1 ; formData.value2 = value2 ; trace("B:value1=" + formData.value1 + ",value2=" + formData.value2);
補足
sassakunさん 度々ありがとうございます。 早速、 receiveData.sendAndLoad("http://localhost/phptest.php", frormData,"GET") ; の様に変更してみたのですが、だめでした。ボタンを押しても反応しませんでした。 またtraceを下記のように配置し、 value1=2,value2=5で実行してみた所↓ _____________________________________________________________ on (release) { trace("A:value1=" + value1 + ",value2=" + value2); formData = new LoadVars () ; formData.value1 = value1 ; formData.value2 = value2 ; receiveData = new LoadVars () ; receiveData.onLoad = function(){ trace(receiveData.sum) ; trace("B:value1=" + formData.value1 + ",value2=" + formData.value2); } formData.sendAndLoad("http://localhost/phptest.php", receiveData , "GET") ; trace("C:value1=" + formData.value1 + ",value2=" + formData.value2); } ______________________________________________________________ A:value1=2,value2=5 C:value1=2,value2=5 undefined B:value1=2,value2=5 と出力されたので 変数にはちゃんと値が渡っていると思います。 また↓の様にプログラムしてphp側のsumの値をみたところ on (release) { formData = new LoadVars () ; formData.value1 = value1 ; formData.value2 = value2 ; formData.send("http://localhost/phptest.php", "_self", "GET"); } php側ではsum = 7 と出るのでphpの方も問題はないと思います。 何がいけないのでしょう。。 うーん わかりません。。