Я пытаюсь построить простую серию в круговую диаграмму; мои данные поступают из базы данных SQL, и я хочу сохранить запрос Mysqli в отдельном файле (чтобы динамически менять свою серию данных, если нужно). Я попытаюсь описать вас шаг за шагом, что я делаю, прося вас исправить меня, если я что-то сделаю неправильно (я полный новичок в Highcharts и javascript...).
1) MySqli
query и json_encode
: в PHP файле я использую этот код для извлечения данных и преобразования их в формат JSON:
$query=$mysqli->query("SELECT nickname, count(nickname) as np FROM rating limit 10");
$rows = array();
while($row = mysqli_fetch_assoc($query)) {
$rows[] = $row; }
$rowsjson = json_encode($rows, JSON_NUMERIC_CHECK);
echo $rowsjson;
// I'm using "numeric_check" option to avoid numbers to be formatted as strings
2) Получение данных из внешнего файла через $.get
:
<script src="inc/jquery.js"></script>
<script type="text/javascript">
$.get("test.php", function(ris) {
var result = JSON.parse(ris);
var valori_array = [];
var nick_array = [];
var dati_array = [];
for (j = 0; j < 10; j++) {
// values_array[j] = parseFloat(result[j].np);
// first attempt (getting just numeric data): it works
data_array[j] = '["' + result[j].nicktrasf + '", ' + parseFloat(result[j].np) + ']';
// second attempt (getting the whole thing, Nicknames+Numbers array): it doesn't work
}
Многие вопросы по этой части: -Is есть способ, которым я могу напрямую использовать объект JSON, не имея необходимости извлекать одиночные значения через цикл? -Is объект в этом формате [{"nickname":"Name1","np":55},{"nickname":"Name1","np":20}]
можно использовать для построения круговой диаграммы, которая нуждается в данных в этом другом формате: [["Name1",55],["Name2",20]]
??
3) Построение круговой диаграммы с использованием Highcharts:
$('#container').highcharts({
title: {text: 'Pie Chart Test'},
series:
[{
type: 'pie',
name: "test",
// data: values_array // It works, It draws a pie without names
// data: [["Name1",55],["Name2",20]] // Manually, it works
// data: result // It doesn't work, obvoiusly
// data: ris // It doesn't work, obvoiusly
// data: [data_array] // It doesn't work
data: data_array // It doesn't work... why?
}] });
Где я ошибаюсь? Я думаю, что я почти не использовал все возможности без успеха; массив data_array
кажется, находится в правильном формате, когда я его эхо (и если я попытаюсь вручную вырезать и вставить в свой код эхо-сигнал браузера, он работает правильно...). Может, мне нужно преобразовать свой массив в строку или что-то вроде этого? Надеюсь, кто-то может указать мои ошибки и показать мне правильный путь...
Объекты и массивы очень тесно связаны с JavaScript, но для Highcharts необходим массив для обработки процесса построения/визуализации
Не могли бы вы показать нам вывод
<?php var_dump($data_array);?>
<?php var_dump($data_array);?>
?
$data_array
... Когда я предупреждаю переменную js data_array
, вместо этого это результат: ["Name0", 55],["Name1", 50],["Name2", 22]
т. Д.
var data_test = "[" + data_array + "]";
но это тоже не работает. data_test - строка со структурой EXACT, необходимой для данных круговых диаграмм Highcarts ... Она должна работать ...