3

编辑:已解决。使用以下任一解决方案,但 document.onload 需要更改为 window.onload。也可以在不需要 window.onload 函数的情况下工作。

这是我正在使用的 test.php 文件

<?php 
  include("conn.php");
?>

<!DOCTYPE html>
<html>
<head>
  <title>test</title>
</head>
<body>

    <script src="js/jquery.js"></script>
    <script type="text/javascript">
        document.onload = function (){
          var jsonString = '<?php echo json_encode($rowarr); ?>';
          var jsonObj = jQuery.parseJSON( jsonString );
          console.log(jsonObj);
          alert( jsonObj.Auckland );
    };

  </script>
</body>
</html>

我已经在 Chrome 开发者工具中验证了 jsonString 的值是

'{"Auckland":37616,"Wellington":35357,"Christchurch":29818}'

之后,我没有在控制台或任何警报框中获得任何日志。我也尝试过 JSON.parse 方法而不是 jQuery.parseJSON 无济于事。

我正在尝试将此 JSON 转换为用于谷歌图表地理图表的数据表格式,看起来像这段代码

var data = google.visualization.arrayToDataTable([
    ['City',   'Population', 'Area'],
    ['Rome',      2761477,    1285.31],
    ['Milan',     1324110,    181.76],
    ['Naples',    959574,     117.27],
    ['Turin',     907563,     130.17],
    ['Palermo',   655875,     158.9],
    ['Genoa',     607906,     243.60],
    ['Bologna',   380181,     140.7],
    ['Florence',  371282,     102.41],
    ['Fiumicino', 67370,      213.44],
    ['Anzio',     52192,      43.43],
    ['Ciampino',  38262,      11]
  ]);
4

3 回答 3

4

如果你不把它作为一个字符串,它将是一个对象,你不必解析它

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

代替

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

看起来 document.onload 没有触发/已经触发?你应该使用window.onloador$(document).ready()代替。

于 2012-07-25T23:09:02.467 回答
2

由于您实际上是在实际 html 页面的标签内插入带有 php echo 的 JSON script,因此它在技术上成为对象文字。无需在 JavaScript 中进行额外的解析步骤。因此,在您的情况下,您分配给的值jsonString实际上已经是一个对象。

只有当它确实是字符串形式时,您才需要解析 JSON。所以发送到浏览器的实际脚本部分应该如下所示:

      var cities = {"Auckland":37616,"Wellington":35357,"Christchurch":29818};
      console.log(cities);
      alert( cities.Auckland );

您没有收到警告框,因为您的代码很可能会引发 JavaScript 错误,并在您尝试解析对象后停止执行。

于 2012-07-25T23:08:58.073 回答
1

我猜处理函数永远不会被触发:文档对象上没有load事件(参见window.onload vs document.onload)。无论如何,您都不需要等待,因为处理程序中没有与 DOM 交互的任何内容 - 并且您在<body>标记的底部执行它(请参阅当代码位于底部时是否需要“onload”?)。


由于 JSON 是 JavaScript 的子集,您可以直接将其作为对象字面量输出到脚本中:

var jsonObj = <?php echo json_encode($rowarr); ?>;
console.log(jsonObj);
alert( jsonObj.Auckland );

无需解析它。特别是,当您的 JSON 包含未转义的撇号时,这会破坏您的字符串文字。

于 2012-07-25T23:11:46.203 回答