0

私は配列形式の php を javascript に渡すつもりです。私の解決策は、php を使用して、次のような html リスト項目を生成することです。

<ul id="data" class="hidden">
  <li value="0"> 
    <ul>
      <li value="id">1</li> 
      <li value="productLine">Vintage Cars</li> 
    </ul>
  </li>
  <li value="1"> 
    <ul>
      <li value="id">2</li> 
      <li value="productLine">Ships</li>    
    </ul>
   </li>
   <li value="2"> 
    <ul>
      <li value="id">3</li> 
      <li value="productLine">Trains</li>   
    </ul>
  </li>
</ul>

JavaScript DOM API を使用して、多次元の関連配列にします。

function selectProductLine(){
    var rootUlNode = document.getElementById('data');
    var rootLiNodes = rootUlNode.children;
    var hiddenHash = {};
    for(var i=0;i< rootLiNodes.length;i++){
        var rootLiNodeValue = rootLiNodes[i].getAttribute('value');     
        var liNodes = rootLiNodes[i].firstElementChild.children;
        for(var i=0; i < liNodes.length;i++){
            hiddenHash[rootLiNodeValue] = {};
            var liNodeValue = liNodes[i].getAttribute('value');
            var liNodeContent = liNodes[i].textContent;
            hiddengegHash[rootLiNodeValue][liNodeValue] = liNodeContent;
        }
    }
return hiddenHash;
}

しかし、コードを実行するとブラウザがクラッシュする可能性があるため、デバッグできません。誰かが私の問題を指摘できますか? そして、jsonを使用するなど、phpからjavascriptにデータを転送する要素の方法が必要だと思います.誰かがこのトピックに関するより良い解決策またはリソースを提供できますか?

4

3 に答える 3

1

PHP 配列がある場合は[json_encode][1]、JSON オブジェクトとしてレンダリングするために使用できます。例えば:

<?php
$arr = array(
    array('id' => 1, 'productLine' => 'Vintage Cars'),
    array('id' => 2, 'productLine' => 'Ships')
);
echo 'var products = ' . json_encode($arr) . ';';
?>

次のようにレンダリングします。

var products = [ { 'id': 1, 'productLine': 'Vintage Cars' }, { 'id': 2, 'productLine': 'Ships' } ];
于 2012-08-22T06:04:53.843 に答える
0

より良い方法は、PHP でデータ構造を JSON としてエンコードし、結果の文字列のクライアント側で JSON.parse() を呼び出すことです。を使用json_encodeしてデータをエンコードし、json2.jsを使用して文字列を解析できます。

JSON 文字列を適切にエスケープするように注意してください。

于 2012-08-22T06:06:29.503 に答える
0

さて、あなたのスクリプトは、私が知る限りほとんど問題ありません。ただし、hiddenHash のスペルを下から 5 行間違えています。hiddengeghash を hiddenhash に変更すると、少なくとも jsfiddle でエラーなしで実行されます。実際に配列を返すことを確認するためだけに、自由に document.write を追加しました。

http://jsfiddle.net/2WBjJ/

同じループで使用されているため、2 番目の i も i2 に変更しました。

于 2012-08-22T06:09:25.700 に答える