Я пытаюсь сделать простую визуализацию некоторых данных из базы данных, которую я получаю через JSON из простой веб-службы. Все делается на локальном хосте. Проблема заключается в том, что формат JSON для конструктора DataTable. Я прочитал документацию, и я думаю, что создал точный формат json, но по какой-то причине, когда я передаю данные конструктору DataTable, он не создает данные, а диаграмма не инициализируется, она просто дает Ошибка: в таблице нет столбцов. Данные, которые я получаю из базы данных, хороши. Диаграмма работает с данными примера, которые даны как литерал, поэтому это не что-то с javascript.Ошибка Google bubble chart: таблица не имеет столбцов
Вот код для поколения json (обратите внимание, что я также попытался сделать json с пространством «» и «» в обратном порядке, что означает «cols»: [{id: 'ID', type : «строка»}, и он не работает либо):
$niz = array();
while ($red = $db->getResult()->fetch_object())
{
$niz[] = $red;
}
$jsonResponse = '{
"cols": [{id: "ID", type: "string"},
{id: "Poles", type: "number"},
{id: "Victories", type: "number"},
{id: "Team", type: "string"}
],
"rows": [';
$i = 0;
foreach ($niz as $line) {
$i = $i+1;
$addOn = '{"c":[{"v": "'.$line->name.'"}, {"v": '.$line->poles.'}, {"v": '.$line->victories.'}, {"v": "'.$line->teamName.'"}]}';
if($i == count($niz))
{
$addOn.='] }';
}
else
{
$addOn.=',';
}
$jsonResponse.=$addOn;
}
echo json_encode($jsonResponse);
});
а вот код на стороне клиента для графика:
<html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var jsonData = $.ajax({
url: "http://127.0.0.1/VisualisationWS/poleVictoryRatio.json",
dataType:"json",
async: false
}).responseText;
var data = new google.visualization.DataTable(jsonData);
var options = {
title: 'Correlation between pole positions and wins of drivers, taking in account the team they are currently in.',
hAxis: {title: 'Poles'},
vAxis: {title: 'Victories'},
bubble: {textStyle: {fontSize: 11}},
};
var chart = new google.visualization.BubbleChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chart_div" style="width: 900px; height: 500px;"></div>
</body>
</html>
спасибо! :) Теперь он работает. Мне было глупо пытаться кодировать json самостоятельно, но для будущих применений я всегда буду создавать массивы, а затем использовать json_encode. – Matija