AS3でPHPに値を渡して処理結果をFLASH側に戻す方法

このQ&Aのポイント
  • AS3でPHPに値を渡して処理結果をFLASH側に戻す方法についてお調べです。
  • テスト用に値を送らずに結果を返すPHPを作成しましたが、1番目の値がundefinedになってしまう現象が発生しています。
  • for inで取得した場合は全ての値が取得できるのに、直接参照すると1番目の値が取得できません。解決方法を教えてください。
回答を見る
  • ベストアンサー

Objectの1番目の値がundefinedに

AS3にてPHPに値を渡して、処理した結果をFLASH側に戻す処理をしています。 今回はテスト用に、値は送らずに単純に結果を返すだけのPHPを作ったのですが、1番目の値がundefinedになってしまいます。 for inで取得すると正常にすべての値が取得できるのですが、直接参照するとダメです。2番目以降の値は取得できます。 このような現象について、お心当たりございましたら、是非お願い致します。 ●flash側 import ConnectPHP; //PHPとの受け渡しを行う外部AS var connectPHP = new ConnectPHP(); connectPHP.addEventListener(ConnectPHP.COMPLETE, completeHandler); connectPHP.sendAndLoad("check.php"); function completeHandler(e:Event):void { var obj:Object = connectPHP.result; for (var i in obj) { trace(i, '=>', obj[i]); } trace(obj.a); trace(obj.b); } ●PHP側 <?php echo "a=1&b=2"; ?> ●結果 a => 1 b => 2 undefined 2 ※for のtrace結果の時に、空の2行が書き出されます。

  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • dmq
  • ベストアンサー率80% (21/26)
回答No.1

FlashDevelop 4.0.1 / FlexSDK 4.6を使用して検証してみました。 var urlVariables:URLVariables = new URLVariables("a=1&b=2"); var obj:Object = new Object(); for (var k:String in urlVariables) {  obj[k] = urlVariables[k]; } for (k in obj) {  trace(k, '=>', obj[k]); } trace(obj.a); trace(obj.b); と言うコードを組んだ結果、 b => 2 a => 1 1 2 となりました。 ConnectPHPと言うものが何者だか解らないのですが、 生の戻り値データを取得することはできないのですか? つまり、Flash側で"a=1&b=2"という文字列は取れないのですか?

swordfish77
質問者

お礼

自己解決しました。 PHP側で、<?phpより前に空行が2行含まれていたのが原因でした。 ケアレスミスでお手数をおかけいたしました。

swordfish77
質問者

補足

ご回答ありがとうざいます。 ConnectPHPはこちらのサイトのクラスを使わせてもらいました。 http://feb19.jp/blog/archives/000162.php 今思いついたのですが for inで取得すると空値が出てくるので 先頭の名前に、改行コードのような不要な情報が含まれてしまっているのかも知れません。

関連するQ&A

  • 受け取った値が"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

  • obj.property のundefined判定

    obj.property のundefined判定 未定義のローカル変数を評価すると、以下の結果になります。 <script type="text/javascript"><!-- var a; if(a === undefined){ alert('a is undefined!'); } // エラーは発生しない if(b === undefined){ alert('b is undefined!'); } // 「ReferenceError: b is not defined」のエラーが発生し、if文が評価されない if('undefined' === typeof b){ alert('b is undefined!'); } // エラーは発生しない //--></script> 未定義のローカル変数は undefined との比較ではチェックできず、typeof でチェックする必要があることが分かります。 対して、「存在が保証されているオブジェクトの存在しないプロパティ」でチェックすると、以下の結果になります。 <script type="text/javascript"><!-- var obj = { a:'valueA', b:'valueB' }; if(obj.property === undefined){ alert('obj.property is undefined!'); } // エラーは発生しない if('undefined' === typeof obj.property){ alert('obj.property is undefined!'); } // エラーは発生しない //--></script> 不思議に思い、ECMA-262 3rd Edition仕様書を読んでみたところ、下記文言が見つかりました。 ---------- 8.6.2.1 [[Get]] (P) O の [[Get]] メソッドがプロパティ名 P で呼出されると、次のステップがとられる: 1. O が P という名前のプロパティを持っていなければ、ステップ 4 へ進む。 2. そのプロパティの値を取得する。 3. Result(2) を返す。 4. O の [[Prototype]] が null ならば、undefined を返す。 5. [[Prototype]] の [[Get]] メソッドを、プロパティ名 P で呼び出す。 6. Result(5) を返す。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/8_Types.html#section-8.6.2 ---------- この場合、ステップ4の「obj.property が nullなため undefined を返す」という処理が行われた、という解釈で合っているでしょうか? ほぼ正しいと感じているのですが、「仕様書の中で見るべきところが合っているのか」に自信が持てず、確信に至っていません…。

  • オブジェクトがありませんのエラー

    過去ログを呼んで近いのがあったのでよく読んだのですが よくわかりませんので書き込みします。 以下のスクリプトで「オブジェクトがありませんのエラーが発生します。3行目のfor文の「obj.childNodes」でエラーが発生します。 「document.getElementById」が「null」であるのが原因のようですが、なぜ「document.getElementById」に値が入らないのかがつかめません。 お手数ですがよろしくお願いします 【script】 --------------------------------------------- if(document.getElementById && document.all && !navigator.userAgent.match(/Opera/)){ var obj = document.getElementById("mainmenu"); for(var i=0;i<obj.childNodes.length;i++){ if(obj.childNodes[i].className=="pullmenu"){ obj.childNodes[i].onmouseover = function(){pull(this) }; obj.childNodes[i].onmouseout = function(){pull(this) }; } } } --------------------------------------------- 【html】 --------------------------------------------- <ul id="mainmenu"> <li id="Begginer" class="pullmenu"><a href="http://www.○○○.co.jp/b/w.php">○○○</a> <ul> <li><a href="http://www.○○○.co.jp/b/w.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/s.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/m.php">○○○ </a></li> </ul> </li> </ul>

  • オブジェクトの番号

    お世話になります。 JavaScriptでオブジェクトプロパティを取得する。 例えば var obj=document.getElementsByTagName("*"); var len = obj.length; for (var i=0;i<len;i++){   if(obj[i].tagName.match(img)){   ・・・・・・ このときiに入る値は、そのオブジェクトの番号が入っていると思うのですが、 この番号自体のみをあるオブジェクトから取得することはできないものなのでしょうか。 具体的に <img src="・・・" onclick="getObjNo(this)"> function getObjNo(obj){  var objNo=?????  //ここで、imgオブジェクトの番号を取得したいのですが。その方法がわかりません。 } よろしくお願いいたします。

  • 代入ができない。(undefined)

    環境:XP SP2, IE6/php, html, javascript submitした際にjavascriptの関数(getNo())が呼ばれ、その関数内で代入ができず参っています。 .php ----- <? $setNo = [111,222,333,444,555]; for($i=0;$i<5;$i++) {?> <input type="text" name="no[<?=$i;?>]" value="<?=$setNo[i];?>" id="no"> <?}?> (submit省略) .js ----- function getNo(obj) { var orgNo = document.all("no"); var bufNo = ""; //初期化空 //var bufNo ; //初期化しないと※1 //var bufNo = "huga";//初期化"huga"※2 for(var k=0; k<orgNo.length; k++) {  alert(orgNo[k].value);//k=0なら111と表示される bufNo = orgNo[k].value;//代入してるのに alert(bufNo='+bufNo); //空のまま →代入されてない なぜ?? //alert(bufNo='+bufNo);//※1undefined→代入されてない //alert(bufNo='+bufNo);//※2huga→代入されてない alert(orgNo='+orgNo[k].value);//k=0のときなら111と表示される } .jsには他にもsubmitから呼ばれている関数があり それらは正常に動作しますが、この関数だけおかしいので 書き直してみたりしましたが改善されません。 また、関数内で配列も宣言してますが、 配列要素にfor文のiなどを[i]のようにいれても、配列の値がうまく変数に代入できません。 ただし、[0]や[2]と指定すると正しい値が表示され、代入もできます。 undefinedになることが問題なのではなく 代入されない理由がわかりません。 どういうことになっているのか教えてください。

  • なぜundefinedになってしまうのでしょうか?

    乱数を配列にして、それを基準にしてランダムに処理を実行させたいのですが、 なぜかarrayRandomNum[0]がundefinedになります。 配列の始めのインデックスに当たる数値を取得できると考えていたのですがなぜundefinedになってしまうのでしょうか? let arrayRandomNum = [randomNumFunk(2)]; console.log(arrayRandomNum[0]); function randomNumFunk(count) { var generatedArray = []; var generatedCount = generatedArray.length; for(var i = 0 ; i < count; i++){ var candidate = Math.floor(Math.random() * count); for(var j = 0; j < generatedCount; j++) { if(candidate == generatedArray[j]){ candidate = Math.floor(Math.random() * count); j= -1; } } generatedArray[i] = candidate; generatedCount++; } return generatedArray; };

  • AS3.0ですが、下記2つのコードの違いがわかりません。。

    AS3.0ですが、下記2つのコードの違いがわかりません。。 ↓こちらのコードは undefined になるのですが、 --------------------------------- var box:Array = new Array(); for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j] = new Array(); box[j][i] = i+j; } } trace(box[0][0]); ----------------------------------- ↓こちらのコードは値をとることが出来ます。 ----------------------------------- var box:Array = new Array(); for(var k=0; k<10; k++){ box[k] = new Array(); } for(var j=0; j<1; j++){ for(var i=0; i<10; i++){ box[j][i] = i+j; } } trace(box[0][1]); ----------------------------------- どういう理由で、値が取れるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 三次元配列の要素をMCで指定して呼び出す

    a0b0~a2b2の計九つのムービクリップをクリックすると、三次元配列の要素からデータを取り出して出力することを考えています。たとえばa1b2をクリックすると、配列の中から[1][2]の要素を取りだします。下の配列の場合は"ウ"を出力します。 // var obj_array:Array = [["1", "2", "3"], ["a", "b", "c",], ["ア", "イ", "ウ"]]; for (var i = 0; i<=2; i++) { this[i].n = i; for (var j = 0; j<=2; j++) { // 各ボタンの固有値 n を設定 this[j].m = j; // 各ボタンの onRelease 動作定義 this["a"+i+"b"+j].onRelease = function() { trace(obj_array2[this.n][this.m]); }; } } //  しかし、どれをクリックしても"undefined"で返ってきます。  どのような書き直せばよいかご教授ください。

    • ベストアンサー
    • Flash
  • 【スコープ】グローバル変数

    タイムラインに、このような記述をしました。 _global.blnFlg = 10; var a = _global.blnFlg; trace(a); 実行するとtrace()は、 undefinedと返ってきます。 どうすれば正しく値を取得できるのでしょうか?

    • ベストアンサー
    • Flash
  • こちらのソースですが、なぜundefinedがでるのでしょうか?

    こちらのソースですが、なぜundefinedがでるのでしょうか? また、undefinedを消す方法はありますか? よろしくお願いいたします。 <script> window.onload = function(){ var hairetu = Array(1,2,3,4,5,6,7,8,9,10); for(var i=0; i<hairetu.length; i++){ var hoge; if(hairetu[i] % 2 == 0 && hairetu[i] % 3 == 0){ hoge += hairetu[i] + '\n'; }else if(hairetu[i] % 2 == 0){ hoge += hairetu[i] + '\n'; }else if(hairetu[i] % 3 == 0){ hoge += hairetu[i] + '\n'; }else { hoge += hairetu[i] + '\n'; } } alert(hoge); } </script>

専門家に質問してみよう