У меня есть массив JSON, переданный через ajax, и у меня возникают проблемы с отображением данных.
Мне нужно иметь возможность передавать массив на диаграмму, динамически добавляя столбцы без дубликатов.
Я пытался передать разные значения, используя arrayToDataTable()
и DataTable()
, затем используя data.addColumns()
и data.addRow()
, однако каждый раз при ошибках.
ajax вызов сработал:
$.ajax({
type: "POST",
url: "/file.php",
data: {
data: dataHere,
},
dataType: "JSON",
success: function(result) {
var div = mydiv;
drawInterfaceChart(result,div);
},
});
JSON, закодированный из PHP с использованием:
$SQL = "SELECT DATE_FORMAT(date, 'new Date(%Y, %c, %d, %H, %i, %s)') as date, ifDesc, ifInOctets FROM tablename WHERE date between (CURDATE() - INTERVAL 1 MONTH ) and CURDATE()";
$Results = mysqli_query($db, $SQL) or die("Mysql cannot run Query");
$SQLRows = mysqli_num_rows($Results);
if ($SQLRows > 0) {
$rows = array();
while ($row = MySQLi_fetch_assoc($Results)) {
$rows[] = $row;
}
echo json_encode($rows);
}
Пример переданного массива JSON:
0: {date: "new Date(2019, 3, 26, 16, 13, 15)", ifDesc: "lo", ifInOctets: "2147483647"}
1: {date: "new Date(2019, 3, 26, 16, 13, 15)", ifDesc: "Port1", ifInOctets: "2147483647"}
2: {date: "new Date(2019, 3, 26, 16, 13, 15)", ifDesc: "Port2", ifInOctets: "2147483647"}
3: {date: "new Date(2019, 3, 26, 16, 13, 16)", ifDesc: "Port6", ifInOctets: "2147483647"}
4: {date: "new Date(2019, 3, 26, 16, 13, 16)", ifDesc: "imq0", ifInOctets: "906413834"}
5: {date: "new Date(2019, 3, 26, 16, 17, 31)", ifDesc: "lo", ifInOctets: "2147483647"}
6: {date: "new Date(2019, 3, 26, 16, 17, 49)", ifDesc: "Port1", ifInOctets: "2147483647"}
7: {date: "new Date(2019, 3, 26, 16, 17, 53)", ifDesc: "Port2", ifInOctets: "171330279"}
8: {date: "new Date(2019, 3, 26, 16, 17, 57)", ifDesc: "Port6", ifInOctets: "2147483647"}
9: {date: "new Date(2019, 3, 26, 16, 17, 57)", ifDesc: "imq0", ifInOctets: "1103910085"}
10: {date: "new Date(2019, 3, 26, 16, 20, 38)", ifDesc: "lo", ifInOctets: "2147483647"}
11: {date: "new Date(2019, 3, 26, 16, 20, 39)", ifDesc: "Port1", ifInOctets: "2147483647"}
12: {date: "new Date(2019, 3, 26, 16, 20, 40)", ifDesc: "Port2", ifInOctets: "194386054"}
13: {date: "new Date(2019, 3, 26, 16, 20, 41)", ifDesc: "Port6", ifInOctets: "2147483647"}
14: {date: "new Date(2019, 3, 26, 16, 20, 42)", ifDesc: "imq0", ifInOctets: "1128562685"}
Моя функция рисования:
function drawInterfaceChart(array,divR) {
var dataSet = [];
$.each(array, function (data, value) {
dataSet.push([value.date, value.ifDesc, value.ifInOctets]);
});
var data = google.visualization.arrayToDataTable(dataSet);
var chart = new google.visualization.LineChart(document.getElementById(divR));
var options = {
title: '',
legend: { position: 'right' }
};
chart.draw(data, options);
}
Этот макет возвращает ошибку: столбцы данных для оси # 0 не могут иметь тип string
Столбец 0 должен представлять собой дату и время, и линейная диаграмма должна быть представлена для каждого столбца и его данных для значения 'ifDesc'. Я хочу добавить больше данных в диаграмму, поэтому создание столбцов должно быть динамичным.
Заранее спасибо!
EDIT:
Я забыл упомянуть, что моя страница включает в себя: google.charts.load('current', {'packages':['corechart', 'gauge']});
, и у меня есть другие рабочие диаграммы на той же странице.