для того, чтобы создать таблицу данных Google, непосредственно из json, следующим образом ...
var data = new google.visualization.DataTable(jsonData);
данные json должны быть в очень конкретном формате c, найдено здесь .
Что касается формата данных для определенной c диаграммы,
каждый имеет определенный формат c, формат данных для линейной диаграммы можно найти здесь .
первый столбец таблицы данных представляет ось x,
может быть любого типа (дата, число, строка и т. Д. c ...).
все следующие столбцы должны быть числами,
, которые представляют каждую серию в диаграмме, или линию, которую нужно провести.
, поэтому пример json, необходимого для рисования линейного графика,
с датой на оси x,
и четырьмя линиями, выглядит следующим образом ...
var jsonData = {
"cols": [
{"label": "Date", "type": "date"},
{"label": "Sales A", "type": "number"},
{"label": "Sales B", "type": "number"},
{"label": "Sales C", "type": "number"},
{"label": "Sales D", "type": "number"}
],
"rows": [
{"c":[{"v": "Date(2019, 10, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2019, 11, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 0, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 1, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]}
]
};
при использовании ajax для получения данных json,
не использовать -> async: false
- эта опция устарела.
Вместо этого используйте метод обещания done
, который будет иметь данные в качестве аргумента.
$.ajax({
url: "getData.php",
dataType: "json",
}).done(function (jsonData) { // <-- json data argument
});
см. Следующий рабочий фрагмент,
здесь, я использую метод обещания fail
для жесткого кодирования данных,
, так как ваша страница php не может быть достигнута из этот сайт.
на вашем сервере, он должен работать без метода сбоя ...
google.charts.load('current', {
packages: ['corechart']
}).then(function () {
var options = {
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Sales'
},
title: 'Today',
height: 600
};
var chart = new google.visualization.LineChart(document.getElementById('today'));
$.ajax({
url: 'getData.php',
dataType: 'json',
}).fail(function () {
var jsonData = {
"cols": [
{"label": "Date", "type": "date"},
{"label": "Sales A", "type": "number"},
{"label": "Sales B", "type": "number"},
{"label": "Sales C", "type": "number"},
{"label": "Sales D", "type": "number"}
],
"rows": [
{"c":[{"v": "Date(2019, 10, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2019, 11, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 0, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]},
{"c":[{"v": "Date(2020, 1, 1)"}, {"v": 1000}, {"v": 2000}, {"v": 3000}, {"v": 4000}]}
]
};
drawChart(jsonData);
}).done(drawChart);
function drawChart(jsonData) {
var data = new google.visualization.DataTable(jsonData);
chart.draw(data, options);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="today"></div>
РЕДАКТИРОВАТЬ
возникла проблема с вызовом ajax.
изменить с ...
var jsonData = $.ajax({
url: 'getData.php',
dataType: 'json',
})
drawChart(jsonData);
}).done(drawChart);
изменить на ...
$.ajax({
url: 'getData.php',
dataType: 'json',
}).done(drawChart);
также, похоже, вы пропустили закрывающую скобку в обещании оператора загрузки.
попробуйте этот код. ..
google.charts.load('current', {
packages: ['corechart']
}).then(function () {
var options = {
hAxis: {
title: 'Time'
},
vAxis: {
title: 'Sales'
},
title: 'Today',
height: 600
};
var chart = new google.visualization.LineChart(document.getElementById('dagens'));
$.ajax({
url: 'getData.php',
dataType: 'json',
}).done(drawChart);
function drawChart(jsonData) {
var data = new google.visualization.DataTable(jsonData);
chart.draw(data, options);
}
});