PHP JSON HIGHCHARTS LOAD Результат базы данных
-
26-10-2019 - |
Вопрос
Я застрял!
Мне нужно создать Hightchart с результатом JSON. Я нашел здесь несколько источников, но не могу поставить это на работу.
Ближее самое близкое, что я могу сделать это:
Варианты диаграммы:
var options = {
chart: {
renderTo: 'tudo',
defaultSeriesType: 'column',
rightMargin: 80
},
title: {
text: 'Weekdays'
},
subtitle: {
text: 'Source: somewhere in a calendar'
},
xAxis: {
labels: {
enabled: false
}
},
yAxis: [
{
min: 0,
title: {
text: 'Amount'
}
},
{
linkedTo: 0,
opposite: true
}
],
series: []
};
Ajax Call:
$.getJSON('ajax/calc.ajax.php', function(data) {
var series = [];
$.each(data, function(key, value) {
series.name = key;
series.data = value;
options.series.push(name);
});
var chart = new Highcharts.Chart(options);
});
HighChart загружается ОК и заполняет серию Series 1, Series 2 ....
Но никакой графики не сделано, он держит пустым. ( что-то вроде этого: Демо).
Хочу знать, упускаю ли я что -то или все.
Спасибо
Обновление: я меняю SQL, теперь я работаю с двумя полями, и с этим, GRFIC работает идеально, теперь я просто хочу знать, так ли это в порядке.
header('Content-Type: application/json');
while(!$res->EOF){
//$json = array("group" => "Web", "action" => "list");
$json[$res->fields["DESMAR"]] = array(intval($res->fields["QTD"]));
//$json["users"] = array(array("name" => "JulioGreff", "status" => "online"));
$res->MoveNext();
}
echo json_encode($json);
Решение
В твоей Ajax Call -
$.getJSON('ajax/calc.ajax.php', function(data) {
var series = []; // <---------------------- must be object not array
$.each(data, function(key, value) {
series.name = key;
series.data = value;
options.series.push(name); // <-------- it should be series not name
});
var chart = new Highcharts.Chart(options);
});
Итак, это было бы следующим образом -
$.getJSON('ajax/calc.ajax.php', function(data) {
$.each(data, function(key, value) {
var series = {}; // <-------------------- moved and changed to object
series.name = key;
series.data = value;
options.series.push(series); // <-------- pushing series object
});
var chart = new Highcharts.Chart(options);
});
Кроме того, учитывая JSON, который вы получаете -
{"nome": "Transformador 250VA 0-230-380V / 0,24V-0-48V", "Modelo": "Transformador", "Marca": "Seit", "Valor": "318,87 | 542.08", ",", " qtdade ":" 0 "??}
Что вы делаете в $.each
-
series.data = value;
не имеет смысла.
Series.Data это массив. Итак, это может выглядеть как либо следующим образом -
[y1, y2, y3, ....] // array of numbers (which are y values)
или же следующим образом -
[[x1, y1], [x2, y2], [x3, y3], ....] // array of arrays of pair of numbers (x and y values)
или же следующим образом -
// array of objects which can have x and y values as properties
[{
name: 'Point 1',
color: '#00FF00',
y: 0
}, {
name: 'Point 2',
color: '#FF00FF',
y: 5
}]
Итак, убедитесь, что ваш код PHP производит JSON, который соответствует массиву одного из вышеперечисленных, тогда series.data = value
внутри вашего $.each
заработает.
Обновлять:Извините, я делаю Java и никогда не делал PHP, поэтому не могу вам очень помочь с PHP. Но можете ли вы попробовать следующее в качестве PHP, просто чтобы посмотреть, появляется ли диаграмма?
header('Content-Type: application/json');
$return_data = array(
array(array(10, 20), array(20, 30), array(56, 30), array(50, 20)),
array(array(10, 0), array(20, 10), array(56, 100), array(50, 40))
);
echo json_encode($return_data);
Обновлять: Рендерировать пирог, сохраняя тот же PHP.
$.getJSON('ajax/calc.ajax.php', function(data) {
var series = { // <-------------------- create just one series object
type: 'pie',
data: [] //data array for new series
};
$.each(data, function(key, value) {
series.data.push([key, value[0]]);
});
options.series.push(series); // <-------- pushing series object
var chart = new Highcharts.Chart(options);
});
Это должно нарисовать круговую диаграмму.
Другие советы
Похоже, проблема заключается в вашем коде PHP. HighCharts ожидает последовать серию конкретный формат. Анкет В вашем случае все сработает (частично), потому что name
это одна из поля, которую он ищет. Данные, однако, должны быть в одном из трех форматов:
- Массив значений y (например,
[0, 1, 2]
) - Массив массивов (x, y значения; например
[[0,0], [1,1], [2,2]]
) - Множество объектов, встречающихся с использованием точечные свойства
Я бы хотел последний формат, я думаю. Например:
var series = [];
series.name = "series1";
series.data = {y: 10}; //very minimalistic example of the object format
options.series.push(name);
Чтобы ваш код работал, вам может потребоваться изменить внутреннюю часть вашего $.each
функционируйте чем -то подобным:
$.each(data, function(key, value) {
series.name = key;
series.data = {
y: value.property_you_are_interested_in
};
options.series.push(name);
});
... конечно, если бы вы хотели использовать одну из других форм, это было бы также довольно легко:
//First form (array of y values)
var series = {};
series.data = [];
$.each(data, function(key, value) {
series.name = key;
series.data.push(value.property_you_are_interested_in);
});
options.series.push(series);
//Second form (array of x, y values)
var series = {};
series.data = [];
$.each(data, function(key, value) {
series.name = key;
series.data.push([value.X_property_you_are_interested_in, value.Y_property_you_are_interested_in]);
});
options.series.push(series);