2013-07-25 26 views
10

Myślę, że to dlatego, że moja globalna var chart nie została jeszcze ustawiona po wywołaniu funkcji requestData.Highcharts.js nie wyrenderuje wykresu, mówi komunikat "Nie można odczytać właściwości serii" o niezdefiniowanym "

To jest mój kod highcharts wewnątrz $(document).ready(function()

 chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       defaultSeriesType: 'spline', 
       marginRight: 130, 
       marginBottom: 25, 
       events: { 
       load: requestData() 
       } 
      }, 
      title: { 
       text: 'Reporte PMU', 
       x: -20 //center 
      }, 
      subtitle: { 
       text: '', 
       x: -20 
      }, 
      xAxis: { 
       type: 'datetime', 
       tickPixelInterval: 150, 
       maxZoom : 20 * 1000, 
       title: { 
        text: 'tiempo' 
       }, 
       labels : { y : 0, rotation: -60 } 
      }, 
      yAxis: { 
       title: { 
        text: 'Amount' 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 1, 
        color: '#808080' 
       }] 
      }, 
      tooltip: { 
       formatter: function() { 
        return '<b>'+ this.series.name +'</b><br/>'+ 
        this.x +': '+ this.y; 
       } 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'right', 
       verticalAlign: 'top', 
       x: -10, 
       y: 100, 
       borderWidth: 0 
      }, 
      series: [{ 
       name: 'serieTension', 
       data: [] 
      }] 
     });  
    }); 

a to mój requestData()

 $.ajax({       
      url: 'data2.php', 
      success: function(point) { 
       var series =chart.series[0], 
       shift = series.data.length > 20; //shift if the series is longer than 20 

       //add point 
       chart.series[0].addPoint(point, true, shift); 

       setTimeout(requestData, 1000); 
      }, 
      cache : false 
     }); 
    } 

Odpowiedz

7

Wystarczy umieścić

var chart; 

poza wszystkimi funkcjami, obok dokumentu gotowego obsługujący, aby uczynić go globalnym.

EDIT:

również dodać odwołanie wewnątrz zaproszenia obciążenia

load: function() { 
    chart = this; // `this` is the reference to the chart 
    requestData(); 
} 
+0

mam już schemat var jako zmienną globalną poza wszystkimi stdscr – rrey

+0

doskonała, dzięki. to był problem, którego nie odwoływałem do wykresu – rrey

+0

Nigdzie indziej nie znalazłem tego wglądu, aby dodać odwołanie w wywołaniu obciążenia. To w końcu sprawiło, że mój wykres działa z danymi na żywo. – 0rkan