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;
}

但是运行代码可能会使我的浏览器崩溃,所以我无法调试它,任何人都可以指出我的问题在哪里?而且我认为应该有一种元素方式将数据从 php 传输到 javascript,比如使用 json,有人可以在这个主题上提供更好的解决方案或资源吗?

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/

我还将第二个 i 更改为 i2 因为它们在同一个循环中使用

于 2012-08-22T06:09:25.700 回答