通过 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 【问题描述】:

我有一个多维数组,我想将它发送到一个带有 javascriptphp 脚本,该脚本解析 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 &rarr;"></p>
</form>

json-target.php 看起来像这样:

<?php
    print "The value of \$_POST is ";
    print_r($_POST);
?>

$_POST 的输出是Array ( [jsonarray] =&gt; [ )。我想将 $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的主要内容,如果未能解决你的问题,请参考以下文章

PHP 从 Ajax 调用接收空的 $_POST 变量

如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

当我将变量中的值传递给 JSON 代码时它不起作用但是如果我硬编码它在 PHP 中的值

jQuery 与 JSON

Curl和PHP - 如何通过PUT,POST,GET将json传递给curl

如何在json中编码php数组并解析成jquery