如何将PHP数组的数组传递到Javascript

4
我有一个PHP的二维数组,例如以下格式:

"Key1" => { "id" => 1, "name" => "MyName", "address" => "USA" }
"Key2" => { "id" => 2, "name" => "MyName2", "address" => "Australia" }

这个PHP数组中的数据来自SQL数据库。现在我想在JavaScript中使用它。
我在网上搜索后,人们建议使用JSON,并使用以下代码:
var js_var = JSON.parse("<?php echo json_encode($var); ?>");

我在使用Firebug时在Firefox浏览器中遇到了这个错误

missing ) after argument list [Break On This Error]
var js_var = JSON.parse("{"Key1":{"id":"1","name":"MyName","address":"USA"...

错误出现在JSON.parse("{"Key1之后

在谷歌浏览器中,firebug没有报告任何错误


7
使用 JSON.parse('<?php= json_encode($var); ?>'); (请注意是 _单引号_)。 - Brad Christie
精确的值是多少?您已经削减了可能关键的信息... - deed02392
3个回答

5
var js_var = JSON.parse('<?php echo json_encode($var); ?>');

或者,更好的选择是:
var js_var = <?php echo json_encode($var); ?>;

由于JSON被定义为有效的JavaScript对象声明语法。


1
运行得非常完美。所以双引号搞砸了它。我没有注意到。非常感谢你。 - John Ng

2

你的错误是由于使用双引号(")来包裹JSON字符串。由于JSON字符串本身也包含双引号,解析器无法正确确定字符串何时开始和结束。

请将行更改为:

var js_var = JSON.parse('<?php echo json_encode($var); ?>');

话虽这样说,JSON或JavaScript对象符号已经是JavaScript编程语言的子集,因此它已经可以被JavaScript引擎解析,所以不一定需要通过JSON.parse进行解析。

var js_var = <?php echo json_encode($var); ?>;

然而,我只建议在你确定要输出的JSON数据正确无误时使用这个选项。因为通过使用JSON.parse可以处理不正确的解析,但是直接注入不正确的JSON数据将导致解析错误。


$var的内容从数据库中取出到PHP数组中。这样做会影响将数据转换为JSON格式的正确性吗? - John Ng
@John 在这种情况下,由于您自己编码数据,我想JavaScript中可能会导致解析错误的任何内容都会导致PHP中的编码错误,因此请确保处理PHP中可能出现的任何错误。 - James

2

为什么要将json_encode转换成字符串,然后在客户端使用JSON.parse呢?这样做是毫无意义的编码。

可以尝试使用var js_var = <?php echo json_encode($var); ?>;


好的,但如果变量是动态生成的(例如基于当前页面状态),那就不太好了。 - Alex
@Alex:你是什么意思呢?我们正在谈论从服务器到客户端的初始响应构建问题。如果客户端需要动态更改“js_var”变量,那么它可以自由地这样做。 - user1207456

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接