11

我正在尝试创建一个通用常量文件以在 php 和 javascript 之间共享,使用 JSON 来存储常量。但我想知道为什么使用json_encode()over echoing json 声明将 JSON 从 PHP 传递到 javascript。

假设我有 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 更有利?

4

10 回答 10

8

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

于 2013-08-30T08:51:27.420 回答
5

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

两种方法:

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

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

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

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

于 2013-08-30T08:55:02.147 回答
4

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

于 2014-03-10T06:47:18.643 回答
1

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

// 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);
于 2014-04-11T09:56:04.810 回答
1

常量.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, ....
于 2013-08-30T09:01:22.807 回答
1

尽管对于您的特定问题来说这似乎有点过头了,但我仍然会选择 json_encode/parse 选项。为什么?你问。好吧,将其视为避免重复。如果您编码/解析,您可以将常量保存在 PHP 代码易于读取的对象中。您的 JS 代码也是如此。

它只是消除了摆弄它的需要。

于 2013-08-30T08:56:24.147 回答
0

如果您使用json_encodephp 数组而不是字符串,则使用:

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

echo json_encode($array);

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

"{\"const1\": \"val\", \"const2\": \"val2\"}"
于 2013-08-30T08:52:50.410 回答
0

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

于 2013-08-30T08:53:14.570 回答
0

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

$json_obj要从数组中获取您的字符串,您的代码将如下所示

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

$json_obj = json_encode($json_array);
于 2013-08-30T08:55:29.330 回答
0

PHP 转 JSON

var locations = <?php echo json_encode($sample_location_master); ?>;
于 2021-05-19T12:11:51.567 回答