在没有JSON.parse()的情况下将JSON直接传递给Javascript

时间:2014-02-11 00:13:25

标签: javascript php json

我注意到很多人将对象从PHP传递到Javascript,就像JSON一样:

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

var obj=jQuery.parseJSON('<?php echo json_encode($obj) ?>');

为什么人们不直接传递JSON?

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

这适用于我尝试过的少数对象。是否存在不起作用的情况?

2 个答案:

答案 0 :(得分:2)

  

将对象从PHP传递到Javascript,如下所示:

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

哎哟!你是对的,这太复杂了。此外,它实际上在JSON字符串中有撇号和反斜杠的严重问题,它们不会被转义并破坏字符串文字。

  

为什么人们不直接传递JSON?

正确地做到这一点的人确实这样做。

  

是否存在不起作用的情况?

是。有一些unicode字符在纯JSON中有效,但在JavaScript中有语法错误 - 有关详细信息,请参阅http://timelessrepo.com/json-isnt-a-javascript-subset。但是,json_encode无论如何都会将它们作为转义序列输出。

答案 1 :(得分:0)

通常,您使用JSON解析器来保护返回的代码可能是错误的情况(而不是崩溃您的脚本,它只会抛出异常并继续)。当从您无法控制的源发送JSON时,这通常是个好主意。当你控制两端(PHP服务器和JS客户端)时似乎没必要。

也就是说,服务器端的“更安全”方法是:

<?php $json_encoded = json_encode ($obj); ?>
var obj=<?php echo ($json_encoded ? $json_encoded : 'null'); ?>;

这确保只将有效对象传递给JavaScript。

更多信息:https://api.jquery.com/jQuery.parseJSON/