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

rov*_*red 9 javascript php jquery json

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

假设我有PHP JSON

<?php 

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

?>
Run Code Online (Sandbox Code Playgroud)

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

<?php echo json_encode($json_obj); ?>
Run Code Online (Sandbox Code Playgroud)

然后我相信我将不得不使用类似的东西$.getScript()来读取PHP文件$json_obj,然后用parseJSON()它来使它在javascript中可用.

但为什么不呢

<?php  echo 'var json = '.$json_obj; ?>
Run Code Online (Sandbox Code Playgroud)

这样你所要做的就是直接加载脚本,你可以直接使用json.

是否有一个特殊的原因,为什么它更有利于使用json_encode()然后简单地回应javascript的声明?

Tob*_*lbs 7

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


kam*_*uel 5

这一切都取决于您想从服务器发送到客户端的内容 - 无论是数据(JSON)还是某些代码.

两种方法:

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

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

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

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


小智 5

将 PHP JSON 传递给 Javascript 并读取

var data = <?php echo json_encode($json); ?>;
var arr = new Array();
arr = JSON.parse(data);
document.write( arr[0].something );
Run Code Online (Sandbox Code Playgroud)