我有一个多维数组,我希望使用Javascript发送到PHP脚本,该Javascript解析JSON数据并在Google Maps上绘制它。我正在尝试使用表单来模拟它:
<?php
$jsontest = array(
0 => array(
'plate_no' => 'abc111',
'longlat' => array(121.003895,14.631563),
'info' => 'first item'
),
1 => array(
'plate_no' => 'abc222',
'longlat' => array(121.103895,14.731563),
'info' => 'second item'
)
);
$jsonarray = json_encode($jsontest);
?>
<form action="json-target.php" method="post" accept-charset="utf-8">
<input type="hidden" name="jsonarray" value="<?php echo $jsonarray; ?>" id="jsonarray">
<p><input type="submit" value="Continue →"></p>
</form>
json-target.php看起来像这样:
<?php
print "The value of \$_POST is ";
print_r($_POST);
?>
$_POST
的输出为Array ( [jsonarray] => [{ )
。我想将$jsonarray
变量的内容传递给Javascript函数(请参阅下面的更新)。
更新:我还有一个简单的Javascript,它应该解析从$_POST
收到的值并通过alert()
发布值:
<script src="/js/json2.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
var json = JSON.parse(<?php echo $_POST['jsonarray'] ?>);
for (var i = 0; i < json.length; i++) {
alert(json[i]);
}
</script>
但是输出会被反斜杠字符破坏。
var json = JSON.parse([{\"plate_no\":\"abc111\",\"longlat\":[121.003895,14.631563],\"info\":\"first item\"},{\"plate_no\":\"abc222\",\"longlat\":[121.103895,14.731563],\"info\":\"second item\"}]);
这样做有什么好办法?
答案 0 :(得分:12)
JSON编码广泛使用引号。只需将JSON编码的字符串输出到HTML value
属性中,引号就会干扰标记。它们需要转义才能放入HTML中。试试这个:
<input type="hidden" name="jsonarray" value="<?php echo htmlspecialchars($jsonarray,ENT_QUOTES); ?>" id="jsonarray">
编辑:为了响应您的更新,我不确定您的JSON.parse应该做什么。在PHP中用json_encode()
编码的任何东西在技术上都是有效的Javascript对象,不需要进一步解析。如果我有一个名为$obj
的对象,其名称属性为'hello',我可以这样做:
<script type="text/javascript">
var o = <?php echo json_encode($obj); ?>;
alert(o.name);
</script>
并收到一条警告'hello'。 json_encode的输出是一个非常合适的javascript对象。
你的$_POST
数组的输出已经用斜杠转义,这让我觉得你的magic_quotes_gpc指令可能已设置为打开。如果是这种情况,您必须使用stripslashes()
取消$ _POST变量。
答案 1 :(得分:3)
花了一些时间才找到答案。尝试:
var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>);
答案 2 :(得分:0)
var json = JSON.parse($('#jsonarray')。val()); alert(json.plate_no [0]);