我注意到很多人将对象从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) ?>;
这适用于我尝试过的少数对象。是否存在不起作用的情况?
答案 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。