将PHP JSON传递给Javascript:echo json_encode vs echo json声明

时间:2013-08-30 08:49:23

标签: php javascript jquery json

我尝试创建一个公共常量文件,在php和javascript之间共享,使用JSON存储常量。但是我想知道为什么使用json_encode()将JSON从PHP传递给javascript而不是回显json声明。

我们说我有PHP JSON

<?php 

$json_obj = '{"const1": "val",
            "const2": "val2"             
                            }';

?>

谷歌搜索,似乎传递回javascript的典型方式是使用

<?php echo json_encode($json_obj); ?>

然后我相信我必须使用类似$.getScript()的内容来读取php文件以获取$json_obj,然后使用parseJSON()使其在javascript中可用。

但为什么不呢?

<?php  echo 'var json = '.$json_obj; ?>

这样你只需要直接加载脚本,就可以直接使用json了。

是否有一个特殊原因使用json_encode()然后简单地将声明回显到javascript更有利?

10 个答案:

答案 0 :(得分:7)

在您的情况下,$json_obj已经是一个字符串。所以没有必要。但是,如果你有一个数组,你想传递给javascript json_encode将帮助你解决这个问题。

答案 1 :(得分:5)

这完全取决于您要从服务器发送到客户端的内容 - 无论是数据(JSON)还是某些代码。

两种方法:

  1. 在服务器上回显JSON文件 - 然后打印JSON文档并将响应Content-Type设置为application/json。这样您就可以使用任何您想要的AJAX库,例如$.get或原始XMLHttpRequest等。这是一种传递数据的方式。

  2. 在服务器上回显Javascript代码,然后使用$.getScript加载它。这是传递代码的一种方式。这可能不太安全,因为您的代码不仅可以包含JSON,还可以包含任何仲裁代码。因此,如果攻击者可以破坏您的服务器,他就可以将代码推送到任何客户端进行远程执行。

  3. 如果您只想传递数据,请使用第一种方法。它更清洁,更安全。

    此外,如果你最终在不同的环境中编写前端,比如说不同的编程语言,你将能够重用相同的JSON返回端点。如果你返回Javascript代码会更难。

答案 2 :(得分:2)

将PHP JSON传递给Javascript并阅读
var stuff = <?php print json_encode($datajson); ?>; var arr = new Array(); arr= JSON.parse(stuff); document.write((arr[0].cust_code );

答案 3 :(得分:1)

即使你的特定问题看起来有些过分,我仍然会选择json_encode / parse选项。为什么?你问。好吧,把它想象成避免重复。如果你编码/解析,你可以保持PHP对象容易读取的对象中的常量。对于你的JS代码也一样。

它简单地消除了摆弄它的需要。

答案 4 :(得分:0)

如果使用php数组而不是字符串,则使用json_encode

$array = array("const1" => "val", "const2" => "val2");

echo json_encode($array);

如果您在字符串上调用json_encode,您将获得:

"{\"const1\": \"val\", \"const2\": \"val2\"}"

答案 5 :(得分:0)

json_encode()的参数应该是PHP数据结构,而不是已经是JSON格式的字符串。当您想将PHP对象传递给Javascript时,可以使用它。

答案 6 :(得分:0)

json_encode是一个将PHP数组转换为JSON字符串的函数,仅此而已。由于您的$json_obj变量已经一个JSON字符串,因此无需进一步转换,您只需将其回显即可。

要从数组中获取您的$json_obj字符串,您的代码将看起来像这样

$json_array = array(
    "const1" => "val",
    "const2" => "val2"
);

$json_obj = json_encode($json_array);

答案 7 :(得分:0)

constant.php

<?php
$array = array("const1" => "val", "const2" => "val2");
?>
<script>
var contants = <?php echo json_encode($array); ?>
</script>

====================== END OF FILE constant.php =======

在php中,您可以使用

进行访问
$array["<key>"]

在javascript中,您可以使用

进行访问
contants.const1, ....

答案 8 :(得分:0)

通常这就是我所做的,这是我发现的最安全的方式:

// holds variables from PHP
var stuff = {};
try {
    // stuff will always be an object
    stuff = JSON.parse('<?php echo empty($stuff) ? '{}' : json_encode($stuff) ?>');
} catch (e) {
    if (e instanceof SyntaxError)
    {
        // report syntax error
        console.error("Cannot parse JSON", e);
    }
}
// show resulting object in console
console.log("stuff:", stuff);

答案 9 :(得分:0)

PHP 转 JSON

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