1

我正在使用 Highcharts 开发混合移动应用程序 (Cordova-Phonegap),我正在从数据库中查询数据并尝试在图表上动态显示数据。

这是获取数据的代码,并且有效。

var exerciseData = [];//global
var chart;//global

编辑2:

$(document).ready(function() {
 //chart is here
}

//Cordova is ready               
  function onDeviceReady() {   
  db.transaction(queryDB);
}

// 查询数据库

function queryDB(tx) {
      //get all results from db
      tx.executeSql('SELECT * FROM MYTABLE', [], querySuccess, errorCB); 
 } 

function querySuccess(tx, results) {

          var len = results.rows.length;
          console.log("MYTABLE table: " + len + " rows found.");

          for (var i=0; i<len; i++){
              console.log("Row = " + i + " Reading_name = " + results.rows.item(i).Reading_name + " Date="+results.rows.item(i).Rec_date + " Reading =  " + results.rows.item(i).Reading);

           //get exercise data only
           if(results.rows.item(i).Reading_name=='exercise'){

               var reading=parseInt(results.rows.item(i).Reading);
               var thisDate=results.rows.item(i).Rec_date;

               var exObj=([manageDate(thisDate), reading]);
               exerciseData.push(exObj);     
              }

           } 
          }

现在,当我采取exerciseData并设置如下:

chart.series[0].setData(exerciseData,true);

然后图表上不会显示任何内容。

但如果我将其设置为:

chart.series[0].setData([[1383824000000,10] ],true);

然后我可以在图表上看到数据点。

如何修复exerciseData数组以在 Highchart 图表系列上显示数据?

console.log(exObj);显示:

[1363996800000, 10]

console.log(exerciseData);给我这个:

[
Array[2]
0: 1363996800000
1: 10
length: 2
__proto__: Array[0]
] 

编辑:图表代码

    $(document).ready(function() {

             chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container',
                    defaultSeriesType: 'line'
                },
                title: {

                    text: 'chart'
                },
                xAxis: {
                    type: 'datetime',
                    labels: {
                             formatter: function() {
                            return Highcharts.dateFormat('%a %d %b', this.value);
                            },
                                dateTimeLabelFormats: { 
                                        minute: '%H:%M',
                                        hour: '%H:%M',
                                        day: '%e. %b',
                                        week: '%e. %b',
                                        month: '%b \'%y',
                                        year: '%Y'
                                    }
                           } 

                },
                yAxis: {

                   title: {
                      text: ''
                    },
                      min: 0
                },

                series: [
                    {
                        name: 'Exercise',
                        data: [],
                        type:'spline'
                    },
                    {
                        name: 'MyData2',
                        data: [],
                        type:'line'
                    });

            chart.series[0].setData(exerciseData,true);//does not work
            chart.series[1].setData([[1383824000000,10]],true);

          });
4

1 回答 1

2

试试这个:

var exObj=[];
exObj.push(manageDate(thisDate));
exObj.push(reading);
exerciseData.push(exObj);

另一种方法是使用 x,y 指定点,例如

var exObj = {
    x:manageDate(thisDate),
    y:reading
}

另外,你需要打电话

chart.series[0].setData(exerciseData,true

在你的成功函数中。

于 2013-03-23T15:13:22.567 回答