Highcharts - 使用MySQLi + JSON获取和绘制数据(一步一步)

时间:2014-11-20 09:53:38

标签: javascript php json mysqli highcharts

我尝试将一个简单的系列绘制成饼图;我的数据来自一个SQL数据库,我想将Mysqli查询保存在一个单独的文件中(如果需要的话,可以改变我的数据系列)。我会尝试逐步描述你在做什么,如果我做错了什么,请你纠正我(我在Highcharts和javascript中总是新手。 )。

1)MySqli查询和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
}

这部分有很多问题: - 有没有办法可以直接使用JSON对象,而不必通过循环提取单个值? - 这种格式的对象[{"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似乎是正确的格式(如果我尝试手动剪切并粘贴到我的代码中,数组的浏览器回显,它可以正常工作......)。 也许我需要将我的数组转换为字符串或类似的东西? 希望有人可以指出我的错误并告诉我正确的方法......

1 个答案:

答案 0 :(得分:0)

对象和数组在JavaScript中密切相关,但Highcharts需要一个数组来处理绘图/可视化过程

您可以尝试向我们展示

的输出

<?php var_dump($data_array); ?>