Fra*_*cis 7 javascript php post json
我有一个多维数组,我想用Javascript发送到PHP脚本,解析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>
Run Code Online (Sandbox Code Playgroud)
json-target.php看起来像这样:
<?php
    print "The value of \$_POST is ";
    print_r($_POST);
?>
Run Code Online (Sandbox Code Playgroud)
而输出$_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>
Run Code Online (Sandbox Code Playgroud)
但是输出会被反斜杠字符所破坏.
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\"}]);
Run Code Online (Sandbox Code Playgroud)
有什么更好的方法呢?
zom*_*bat 12
JSON编码广泛使用引号.只需将JSON编码的字符串输出到HTML value属性中,引号就会干扰标记.它们需要转义才能放入HTML中.试试这个:
<input type="hidden" name="jsonarray" value="<?php echo htmlspecialchars($jsonarray,ENT_QUOTES); ?>" id="jsonarray">
Run Code Online (Sandbox Code Playgroud)
编辑:为了响应您的更新,我不确定您的JSON.parse应该做什么.json_encode()在PHP中编码的任何东西在技术上都是有效的Javascript对象,不需要进一步解析.如果我有一个名为$objname为'hello'的对象,我可以这样做:
<script type="text/javascript">
var o = <?php echo json_encode($obj); ?>;
alert(o.name);
</script>
Run Code Online (Sandbox Code Playgroud)
并得到一个警告说'你好'.json_encode的输出是一个非常合适的javascript对象.
你的$_POST数组输出已被斜杠转义的事实让我想到你的magic_quotes_gpc指令可能已设置为打开.如果是这种情况,你将不得不使用你的$ _POST变量stripslashes().
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           29241 次  |  
        
|   最近记录:  |