通过 POST 将 JSON 编码的变量从 PHP 传递到 Javascript
Posted
技术标签:
【中文标题】通过 POST 将 JSON 编码的变量从 PHP 传递到 Javascript【英文标题】:Passing JSON-encoded variable from PHP to Javascript via POST 【发布时间】:2010-11-25 12:35:26 【问题描述】:我有一个多维数组,我想将它发送到一个带有 javascript 的 php 脚本,该脚本解析 JSON 数据并将其绘制在 Google 地图上。我正在尝试使用表单来模拟它:
<?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\"]);
有什么更好的方法?
【问题讨论】:
问题到底是什么? 【参考方案1】: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>
并收到“你好”的警报。 json_encode 的输出是一个非常合适的 javascript 对象。
$_POST
数组的输出已用斜杠转义这一事实让我认为您的magic_quotes_gpc 指令可能已设置为打开。如果是这种情况,您必须使用 stripslashes()
取消转义 $_POST 变量。
【讨论】:
谢谢!我能够在 json-target.php 中获得输出,但现在 JSON 对象已损坏。我的方法是否正确?【参考方案2】:我花了一段时间才找到答案。试试:
var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>);
【讨论】:
【参考方案3】:var json=JSON.parse($('#jsonarray').val()); 警报 (json.plate_no[0]);
【讨论】:
欢迎来到 ***!请考虑为您的答案添加一些解释。谢谢!以上是关于通过 POST 将 JSON 编码的变量从 PHP 传递到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]
当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值