我在迭代数组以显示一些数据,同时创建另一个数组,用于创建JSON,然后将其分配给JavaScript变量。
<?php
$otherStuff=array();
foreach($myArray AS $row)
{
echo("<tr data-id='{$row['id']}'><td>{$row['firstname']}</td><td>{$row['firstname']}</td></tr>");
$otherStuff[$row['id']]=$row['otherStuff'];
}
echo('<script type="text/javascript">var otherStuff='.json_encode($otherStuff).';</script>');
?>
这似乎不是一个非常干净的方法来完成这项任务。相反,我想知道创建一些隐藏的HTML是否会更好,然后客户端会解析它以创建所需的JavaScript变量。
这样做可能吗?这是一个好主意,还是我应该做些什么呢?如果可能,怎么样?
谢谢
答案 0 :(得分:1)
这是一个基本的例子:
$arr = array('stuff' => 'goes here');
echo "<div data-other-stuff='" . htmlspecialchars(json_encode($arr)) . "'></div>";
产地:
<div data-other-stuff='{"stuff":"goes here"}'></div>
$('div').each(function ea(){
// Some browsers/versions do not support JSON.parse(), try json2.js
var data = $(this).attr('data-other-stuff'),
_data = JSON.parse(data);
console.log(data, _data);
});
制作(在console
中):
'{"stuff":"goes here"}' Object {stuff: "goes here"}
(第一个实际上是一个字符串,但我添加了单引号以使其显而易见。)
http://jsfiddle.net/0mv44jvd/1
就像任何JSON编码一样,一旦你使用它就必须把它变成一个数组或对象。但这一切都是一样的。