通过POST方式将PHP中的JSON编码变量传递到Javascript中
通过POST方式将PHP中的JSON编码变量传递到Javascript中
我有一个多维数组,我想用JavaScript发送到一个解析JSON数据并在Google地图上绘制的PHP脚本中。我正在尝试使用表单来模拟它:
array( 'plate_no' => 'abc111', 'longlat' => array(121.003895,14.631563), 'info' => '第一项' ), 1 => array( 'plate_no' => 'abc222', 'longlat' => array(121.103895,14.731563), 'info' => '第二项' ) ); $jsonarray = json_encode($jsontest); ?>
json-target.php的内容如下:
$_POST
的输出结果是Array ( [jsonarray] => [{ )
。我想将$jsonarray
变量的内容传递给一个JavaScript函数(请参见下面的更新)。
更新:我还有一个简单的JavaScript代码,用于解析从$_POST
接收到的值并通过alert()
显示:
但输出结果带有反斜杠字符。
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\"}]);
有更好的方法吗?
问题的出现原因:在PHP中,将JSON编码的变量传递给JavaScript的时候,可能会出现一些问题。具体来说,本例中的问题是无法正确地将JSON编码的变量从PHP传递给JavaScript的POST方法。
解决方法:要解决这个问题,可以尝试以下步骤:
1. 首先,确保在PHP中正确编码变量为JSON格式。可以使用json_encode()函数来完成这一步骤。
2. 在JavaScript中,使用POST方法将JSON编码的变量从PHP传递给JavaScript。可以使用jQuery的$.post()函数来发送POST请求。
3. 在JavaScript中,使用JSON.parse()函数将接收到的JSON编码的变量转换为JavaScript对象。
4. 最后,使用转换后的JavaScript对象来访问相应的属性或值。
下面是一个示例代码,演示了如何通过POST方法将JSON编码的变量从PHP传递给JavaScript:
PHP代码:
$variable = array( "plate_no" => array("ABC123", "DEF456", "GHI789") ); $json = json_encode($variable);
JavaScript代码:
$.post("example.php", function(data) { var json = JSON.parse(data); alert(json.plate_no[0]); });
以上代码中,PHP代码将一个包含车牌号的变量编码为JSON格式,并通过POST方法传递给JavaScript文件。在JavaScript代码中,使用$.post()函数发送POST请求,并将接收到的JSON编码的数据转换为JavaScript对象。最后,通过访问转换后的JavaScript对象的属性,获取到第一个车牌号并弹出一个对话框显示出来。
希望以上解决方法对你有所帮助!
问题的原因是需要将PHP中的JSON编码的变量传递给JavaScript。在这种情况下,$_POST数组被用来从表单中接收数据。然而,当JSON字符串被传递给JavaScript时,它包含了转义字符,因此需要用stripslashes函数来去除这些转义字符。
解决方法是使用JSON.parse函数将JSON字符串解析为JavaScript对象。在这个例子中,使用了PHP中的echo函数将$_POST数组中的jsonarray变量传递给JavaScript。然后,使用JSON.parse函数将JSON字符串解析为JavaScript对象,并将其赋值给名为json的变量。
下面是完整的解决方法的代码示例:
var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>);
通过这种方法,我们可以成功将PHP中的JSON编码的变量传递给JavaScript,并在JavaScript中将其解析为对象。
问题出现的原因是:当将一个JSON编码的变量输出到HTML的value属性中时,引号会与标记干扰,需要进行转义才能放入HTML中。
解决方法是:使用htmlspecialchars函数对JSON编码的字符串进行转义,然后将转义后的字符串输出到HTML的value属性中。
另外,根据更新内容,使用JSON.parse解析已经通过json_encode在PHP中编码的变量是不必要的,因为json_encode输出的结果已经是一个合法的JavaScript对象。如果需要在JavaScript中使用,直接输出json_encode的结果即可。
另外,如果在$_POST数组输出中发现转义斜杠,可能是由于magic_quotes_gpc指令开启的原因。此时需要使用stripslashes函数对$_POST变量进行反转义。
原文内容如下:
JSON编码使用了大量的引号。当将一个JSON编码的字符串直接输出到HTML的value属性中时,引号会与标记干扰。为了解决这个问题,需要对字符串进行转义才能放入HTML中。可以尝试以下代码:
另外,根据你的更新内容,我不确定你的JSON.parse的用法是什么意思。在PHP中使用json_encode编码的任何内容都是合法的JavaScript对象,不需要进一步解析。例如,如果有一个名为$obj的对象,其中有一个name属性为'hello',可以像下面这样使用:
这样会弹出一个提示框,显示'hello'。json_encode的输出已经是一个合适的JavaScript对象。
如果在$_POST数组的输出中发现转义斜杠,可能是由于magic_quotes_gpc指令开启的原因。在这种情况下,需要使用stripslashes函数对$_POST变量进行反转义。
谢谢!我能够在json-target.php中获取输出了,但是现在JSON对象被破坏了。我是否使用了正确的方法?