0

JSON.stringify() を使用して JavaScript で配列を作成し、非表示の入力フィールドの値属性を結果の文字列に設定しています。

function setSelectedArray(){

        var ticketInfo = new Array();   //creates new array for later
        var num=0;                      //num accumulates the number of the next row
        for(var i=0;i<hlRows.length;i++){
            if(hlRows[i]){  //hlRows is an array with boolean values telling me
                            //which dataArray values to set ticketInfo to
                ticketInfo[num] = dataArray[i];
                //dataArray is a pre-defined array and contains a large amount of data
                //ticketInfo is a smaller array that is gathering all data specified from hlRows
                num++;
            }
        }
        //line below sets 'tix'(hidden input field).value to the JSON version of ticketInfo
        document.getElementsByName('tix').value = (JSON.stringify(ticketInfo));

        //At this point, my alert below displays everything I want to see.
        //It looks like correct JSON to me
        alert("The VALUE of 'tix' is: "+document.getElementsByName('tix').value);

        //this submits the form that the hidden field is inside of.
        //it wouldn't go to the next page(which it does) without
        //this calling the form's action attribute correctly (i think..)
        document.forms["hiddenForm"].submit();
    }

さらに説明が必要な場合は、私のコメントを読むことができます。プロセスの HTML 部分は次のとおりです。

<!-- This button, when clicked, calls the setSelectedArray() function -->
<input class="button" type="button" id="btnContact" value="Select Tickets" onclick="setSelectedArray()" style="width:20em;float:right;"/>

<form id="hiddenForm" action="email.php" method="post">
    <input type="hidden" name="tix" value=""/> <!-- I tried this with no value specified too -->
</form>

何らかの出力を取得するために、email.php でいくつの異なることを試したかわかりません。echos と print と print_r と print をループから試し、「配列」内の値を印刷しましたが、何も機能していないようでした。現在、email.php は次の場所にあります。

<?php
    $jsArray = json_decode($_POST['tix']);
    var_dump($jsArray);
?>

email.php から得られる唯一の出力は、「NULL」(アラートの 2 秒前ではありませんでした) または「配列」です。そうしないと、何も表示されず、空の画面が表示されます。ここで何が間違っていますか?データを投稿するには AJAX を使用する必要がありますか? そうじゃない気がする。

4

1 に答える 1

5

問題は、getElementsByNameが要素の配列を返すことです。

document.getElementsByName('tix')[0].value = (JSON.stringify(ticketInfo));

alert("The VALUE of 'tix' is: "+document.getElementsByName('tix')[0].value);
于 2012-06-13T18:47:18.303 に答える