我要将数组表单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一样,有人可以提供更好的解决方案或资源吗?
答案 0 :(得分: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' } ];
答案 1 :(得分:0)
更好的方法是在PHP中将数据结构编码为JSON,然后在生成的字符串客户端上调用JSON.parse()。您可以使用json_encode
对数据进行编码,使用json2.js来解析字符串。
小心地适当地转义JSON字符串。
答案 2 :(得分:0)
好吧,我的脚本几乎可以告诉我。但是你从底部拼错了hiddenHash 5行。如果我只是将hiddengeghash更改为hiddenhash,它在jsfiddle至少运行时没有错误。我冒昧地添加了一个document.write,以确保它实际上返回一个数组。
我还将第二个i更改为i2,因为它们在同一个循环中使用