2013-07-25 14 views
10

Ich denke, es ist, weil meine globale var chart wurde noch nicht festgelegt, wenn meine Funktion requestData aufgerufen wird.Highcharts.js wird nicht das Diagramm rendern, es heißt Fehler "Kann Eigenschaft nicht lesen 'Serie' von undefined"

Dies ist mein Code von highcharts in einem $(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: [] 
      }] 
     });  
    }); 

und das ist mein 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 
     }); 
    } 

Antwort

7

Gerade

var chart; 

außerhalb aller Funktionen platzieren, neben Ihrem Dokument bereit Handler, um es global zu machen.

EDIT:

Auch fügen Sie einen Verweis in dem Ladeaufruf

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

Ich habe bereits eine var-Chart als globalen Variable außerhalb aller funcions – rrey

+0

ausgezeichnet, danke. das war das Problem Ich habe das Diagramm nicht referenziert – rrey

+0

Nirgendwo sonst fand ich diese Erkenntnis, um eine Referenz in der Ladung Anruf hinzuzufügen. Das hat schließlich dazu geführt, dass mein Diagramm mit Live-Daten funktioniert. – 0rkan