我尝试创建一个公共常量文件,在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更有利?
答案 0 :(得分:7)
在您的情况下,$json_obj
已经是一个字符串。所以没有必要。但是,如果你有一个数组,你想传递给javascript json_encode
将帮助你解决这个问题。
答案 1 :(得分:5)
这完全取决于您要从服务器发送到客户端的内容 - 无论是数据(JSON)还是某些代码。
两种方法:
在服务器上回显JSON文件 - 然后打印JSON文档并将响应Content-Type
设置为application/json
。这样您就可以使用任何您想要的AJAX库,例如$.get
或原始XMLHttpRequest
等。这是一种传递数据的方式。
在服务器上回显Javascript代码,然后使用$.getScript
加载它。这是传递代码的一种方式。这可能不太安全,因为您的代码不仅可以包含JSON,还可以包含任何仲裁代码。因此,如果攻击者可以破坏您的服务器,他就可以将代码推送到任何客户端进行远程执行。
如果您只想传递数据,请使用第一种方法。它更清洁,更安全。
此外,如果你最终在不同的环境中编写前端,比如说不同的编程语言,你将能够重用相同的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); ?>;