【问题标题】:Passing JSON directly to Javascript without JSON.parse()不使用 JSON.parse() 直接将 JSON 传递给 Javascript
【发布时间】:2014-03-08 13:48:03
【问题描述】:

我注意到很多人都像这样将对象从 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) ?>;

这适用于我尝试过的几个对象。有没有这样不起作用的情况?

【问题讨论】:

标签: javascript php json


【解决方案1】:

像这样以 JSON 格式将对象从 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 无论如何都会将这些作为转义序列输出。

【讨论】:

    【解决方案2】:

    通常,您会使用 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多