2012-10-01 31 views
2

遇到麻烦尝试多个数据传递到通过JSON一个Highstock图,这是我到目前为止的代码:Highstock MySQL的JSON多个数据

$(function() { 
    var seriesOptions = [], 
     yAxisOptions = [], 
     seriesCounter = 0, 
     names = ['MSFT', 'AAPL'], 
     colors = Highcharts.getOptions().colors; 

    $.each(names, function(i, name) { 

     $.getJSON('data.php', function(data) { 

      seriesOptions[i] = { 
       name: name, 
       data: data 
      }; 

      // As we're loading the data asynchronously, we don't know what order it will arrive. So 
      // we keep a counter and create the chart when all the data is loaded. 
      seriesCounter++; 

      if (seriesCounter == names.length) { 
       createChart(); 
      } 
     }); 

    }); 



    // create the chart when all data is loaded 
    function createChart() { 

     chart = new Highcharts.StockChart({ 
      chart: { 
       renderTo: 'container' 
      }, 

      rangeSelector: { 
       selected: 4 
      }, 

      yAxis: { 
       labels: { 
        formatter: function() { 
         return (this.value > 0 ? '+' : '') + this.value + '%'; 
        } 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 2, 
        color: 'silver' 
       }] 
      }, 

      plotOptions: { 
       series: { 
        compare: 'percent' 
       } 
      }, 

      tooltip: { 
       pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>', 
       valueDecimals: 2 
      }, 

      series: seriesOptions 

     }); 
    } 
}); 

这是我data.php文件:

$query = "SELECT tiempo,Fp1Ref,F7Ref 
      FROM GraficaEEG limit 10"; 
    $data = mysqli_query($dbc, $query); 
    $i=0; 
    while($row = mysqli_fetch_array($data)) { 

     $rows[$i]=array((float)$row['tiempo'],(float)$row['Fp1Ref']); 
     $rows1[$i]=array((float)$row['tiempo'],(float)$row['F7Ref']); 


     $i++; 
    } 

    echo json_encode($rows), "\n"; 
    echo json_encode($rows1); 

并以这种形式接收数据IM:

[[0,3001],[0.005,4937.22],[0.01,4130.55],[0.015,4213.15],[0.02,4010.61],[0.025,3914.34],[0.03,3785.33],[0.035,3666.13],[0.04,3555.25],[0.045,3447.77]] 

[[0,2995.12],[0.005,4931.59],[0.01,4125.99],[0.015,4203.38],[0.02,4005.27],[0.025,3911.41],[0.03,3777.35],[0.035,3659.15],[0.04,3552.75],[0.045,3442.12]] 

我不知道我做错了,如何通过两套d的ata到一个Highstock图表,如果我只传递一个$行,它可以在三行中得到相同的数据,我将非常感谢任何帮助。

+0

答案有帮助吗? –

回答

1

有3种方法可以将数据传递给Highstock。

  1. 数值列表。例如data: [0, 5, 3, 5]

  2. 具有两个值的数组的列表例如data: [[5, 2], [6, 3], [8, 2]]

  3. 具有命名值的对象的列表。

例如,

data: [{ 
    name: 'Point 1', 
    color: '#00FF00', 
    y: 0 
}, { 
    name: 'Point 2', 
    color: '#FF00FF', 
    y: 5 
}] 

您可以为每一行创建Json对象并将它们存储在一个Json数组中。然后使用另一个Json对象中的named属性(也称为key)传递Json数组,该对象将保存多个Json数组,每个数组具有不同的键。

在返回的Response中,使用它的Key检索每个数组。

有关详情,请文档:http://api.highcharts.com/highstock#series.data

我从来没有工作过的PHP所以,我不能直接帮助,但希望这将是有益的。

0

而不是异步加载数据,我只是将保存最终数据字符串的变量转储到Javascript中。

例如,

chart = new Highcharts.StockChart({ 
      chart: { renderTo: 'container' }, 

      ...all those chart options... 

      series: <?php echo $formattedDataString; ?> 

     }); 


所以当Highcharts负载,所有数据都已经到位即可。当然,这是假定数据采用正确的格式,就像Hardik提到的那样。
如果您需要动态更新数据,那么您仍然可以进行AJAX调用和.update()图表。