[英]Google Chart and Uncaught Error: Invalid JSON string:
在我的Demo.php中,我按如下所述設置了Google圖表可視化:
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var jsonPieChartData = $.ajax({
url: "getVehicleData.php",
dataType:"json",
async: false
}).responseText;
// Create our data table out of JSON data loaded from server.
var piechartdata = new google.visualization.DataTable(jsonPieChartData);
var options = {
title: 'Vehicles Currently in Stock'
};
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
chart.draw(piechartdata, options);
}
</script>
我也有如下所述的getVehicleData腳本,我已經在http://jsonlint.com/上驗證了JSON,但是在Google Chrome上仍然出現錯誤。
$sql_qry = "SELECT `make`, COUNT(*) as total FROM `vehicle` GROUP BY `make` ORDER BY COUNT(*) DESC";
$data = perform_query($db, $sql_qry);
echo '{
"cols": [
{
"id": "",
"label": "Make",
"pattern": "",
"type": "string"
},
{
"id": "",
"label": "TotalNumber",
"pattern": "",
"type": "number"
}
],
"rows": [';
foreach ($data as $d){
//echo $d['make'] . $d['total'];
echo ' {
"c": [
{
"v": "'.$d['make'].'",
"f": null
},
{
"v": "'.$d['total'].'",
"f": null
}
]
}';
}
echo '] }' ;
以下是我在Google Chrome瀏覽器上遇到的錯誤:
Uncaught Error: Invalid JSON string: {
"cols": [
{
"id": "",
"label": "Make",
"pattern": "",
"type": "string"
},
{
"id": "",
"label": "TotalNumber",
"pattern": "",
"type": "number"
}
],
"rows": [ {
"c": [
{
"v": "Vauxhall",
"f": null
},
{
"v": "2",
"f": null
}
]
} {
"c": [
{
"v": "Ford",
"f": null
},
{
"v": "1",
"f": null
}
]
} {
"c": [
{
"v": "Toyota",
"f": null
},
{
"v": "1",
"f": null
}
]
} {
"c": [
{
"v": "Mercedes",
"f": null
},
{
"v": "1",
"f": null
}
]
} {
"c": [
{
"v": "Citreon",
"f": null
},
{
"v": "1",
"f": null
}
]
}] }
$sql_qry = "SELECT `make`, COUNT(*) as total FROM `vehicle` GROUP BY `make` ORDER BY COUNT(*) DESC";
$data = perform_query($db, $sql_qry);
echo '{
"cols": [
{
"id": "",
"label": "Make",
"pattern": "",
"type": "string"
},
{
"id": "",
"label": "TotalNumber",
"pattern": "",
"type": "number"
}
],
"rows": [';
foreach ($data as $d){
//echo $d['make'] . $d['total'];
echo ' {
"c": [
{
"v": "'.$d['make'].'",
"f": null
},
{
"v": "'.$d['total'].'",
"f": null
}
]
},'; // added a , here, but I don't know PHP well enough to NOT add the comma for the LAST loop
}
echo '] }' ;
看到評論-我不太了解PHP以至於無法抑制它,在foreach的最后一個循環中-我是一個javascript書呆子,我知道足夠多的PHP只是危險
編輯:此重寫可能更好
$sql_qry = "SELECT `make`, COUNT(*) as total FROM `vehicle` GROUP BY `make` ORDER BY COUNT(*) DESC";
$data = perform_query($db, $sql_qry);
$output = '';
foreach ($data as $d){
if ($output != '') {
$output .= ',';
}
$output .= '{
"c": [
{
"v": "'.$d['make'].'",
"f": null
},
{
"v": "'.$d['total'].'",
"f": null
}
]
}';
}
echo '{
"cols": [
{
"id": "",
"label": "Make",
"pattern": "",
"type": "string"
},
{
"id": "",
"label": "TotalNumber",
"pattern": "",
"type": "number"
}
],
"rows": [' . $output . '] }' ;
終於在這里進行了排序是答案:
// Connect to the MySQL database
require_once('includes/db_connect.php');
require_once('includes/shared.php');
$sql_qry = "SELECT `make`, COUNT(*) as total FROM `vehicle` GROUP BY `make` ORDER BY COUNT(*) DESC";
$res = perform_query($db, $sql_qry);
echo '
{
"cols": [
{"id":"","label":"Topping","pattern":"","type":"string"},
{"id":"","label":"Slices","pattern":"","type":"number"}
],
"rows": [';
$total_rows = $res->fetchColumn();
$row_num = 0;
while($row = $res->fetch(PDO::FETCH_ASSOC)) {
// do loop stuff
$row_num++;
if ($row_num == $total_rows){
echo '
{"c":[{"v":"'.$row['make'].'","f":null},{"v":'.$row['total'].',"f":null}]}
';
}else{
echo '
{"c":[{"v":"'.$row['make'].'","f":null},{"v":'.$row['total'].',"f":null}]},
';
}
}
echo ']
}';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.