编辑:已解决。使用下面的任何解决方案,但需要将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转换为用于google charts geo chart的数据格式,看起来像这段代码
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]
]);
答案 0 :(得分:4)
如果你不把它作为一个字符串,它将是一个对象,你不必解析它
var jsonObj = <?php echo json_encode($rowarr); ?>;
而不是
var jsonString = '<?php echo json_encode($rowarr); ?>';
var jsonObj = jQuery.parseJSON( jsonString );
看起来document.onload不会触发/已经触发了?您应该使用window.onload
或$(document).ready()
代替。
答案 1 :(得分:2)
由于您实际上是在实际html页面的script
标记内插入带有php echo的JSON,因此它在技术上成为了一个对象文字。无需在JavaScript中执行额外的解析步骤。
因此,在您的情况下,您分配给jsonString
的值实际上已经是一个对象。
只有当JSON确实是字符串形式时才需要解析JSON。因此,发送到浏览器的实际脚本部分应如下所示:
var cities = {"Auckland":37616,"Wellington":35357,"Christchurch":29818};
console.log(cities);
alert( cities.Auckland );
您没有收到警告框,因为很可能您的代码会抛出JavaScript错误,并在尝试解析对象后停止执行。
答案 2 :(得分:1)
我想处理函数永远不会被触发:文档对象上没有load
事件(参见window.onload vs document.onload)。无论如何,您都不需要等待,因为处理程序中没有与DOM交互的内容 - 您可以在<body>
标记的底部执行它(请参阅Is the 'onload' necessary when the code is at the bottom?)。
由于JSON是JavaScript的一个子集,您可以直接将其作为对象文字输出到脚本中:
var jsonObj = <?php echo json_encode($rowarr); ?>;
console.log(jsonObj);
alert( jsonObj.Auckland );
无需解析它。特别是,当你的JSON包含一个未转义的原文时,这会破坏你的字符串文字。