В моем 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, написанный, как указано ниже, и я подтвердил JSON на http://jsonlint.com/, однако я все еще получаю ошибку в 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, чтобы быть опасным только
edit: этот переписывать может быть лучше
$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 ']
}';