【问题标题】:json_ encode - JSON.parse() combination, work well in Firefox but fail in other browsersjson_encode - JSON.parse() 组合,在 Firefox 中运行良好,但在其他浏览器中失败
【发布时间】:2009-09-07 16:38:35
【问题描述】:

我正在使用 json_encode (PHP) 和 JSON.parser (来自 json.org 的 Javascript) 的组合将 JSON 对象从 PHP 传递到 Javascript,JSON 对象可能有引号和双引号,所以我使用了 addlashes () 函数在 PHP 中。这种组合在 Firefox 中运行良好,但在 Safari、Chrome 或 Internet Explorer 等其他浏览器中却不适用。这是代码:

<?php

   $json =array('n' => count($arrayEx), 'items' => array());

   foreach($arrayEx as $item)
   {
      $json['items'][]=array( 'property1' => addslashes($item['property1']),
                     'property2' =>addslashes($item['property2'])
                            );

   }    

   $json_string = json_encode($json);

?>

<script>    
   var json_string= '<? echo $json_string; ?>'; 
   var json_object = JSON.parse(json_string);   //Fail in this line
</script>

失败并显示错误消息“字符串文字未结束”。

谢谢

【问题讨论】:

  • 你不应该加班。您的 JSON 编码器应该负责将字符串转换为字符串文字格式。

标签: php javascript json


【解决方案1】:

去掉引号,它应该可以工作:

var json_string = <?php echo $json_string; ?>;

json_encode 返回的字符串已经是一个有效的 JavaScript 表达式,因此不需要任何进一步的声明。

【讨论】:

  • 谢谢这对我有用,你很快就回答我,但我正在考虑这个问题,现在我对使用 JSON.parse() 的正确场景有点困惑。
  • @hcentelles:啊,是的。 JSON.parse() 仅在 JSON 数据是字符串时使用,例如Ajax 请求的响应。但在您的示例中,json_string 已经是一个对象。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多