2015-09-07 12 views
6

Mam obecnie statyczny wykres google wyświetlający się na mojej stronie internetowej i zastanawiałem się, czy istnieje sposób na jej aktualizację okresową? tj. dodać punkt co 20 sekund?Aktualizowanie wykresu Google okresowo

Nie mogę znaleźć żadnych informacji na ten temat. Proszę mieli do obejrzenia mojego kodu poniżej

function drawAltitudeChart(){ 

      var graph = []; 
      downloadUrl("Map.php", function (data){ 
       var xml = data.responseXML; 
       var markers =  xml.documentElement.getElementsByTagName("marker"); 
       var dataTable = new google.visualization.DataTable(); 
       var options = {title:'Altitude (m above sea level)', 
        curveType:'function', 
        legend:{position:'bottom'}, 
        is3d:true  
       }; 
       var chart; 

       for(var i = 0; i<markers.length; i++){ 
        graph[i] = ['', parseInt(markers[i].getAttribute("alt"))]; 
       } 

       dataTable.addColumn('string', 'id'); 
       dataTable.addColumn('number', 'Altitude'); 
       dataTable.addRows(graph); 


       chart = new google.visualization.LineChart(document.getElementById('curve_chart')); 
       chart.draw(dataTable, options); 

      }); 
     } 
+0

dokładnie jak trzeba zmodyfikować dane? skąd będzie pochodził nowy punkt, co 20 sekund? brzmi jak potrzebujesz po prostu dodać nowy wiersz do 'DataTable' i ponownie narysować' wykres' ...? – WhiteHat

+0

@WhiteHat - Chcę wziąć nowy punkt z mojej bazy danych co 20 sekund ... – fst104

+0

czy udzielona odpowiedź nie pomaga? czy użyjesz 'downloadUrl' i' Map.php' do pobrania nowego punktu? jesteś tam dobry? – WhiteHat

Odpowiedz

1

Aby dodać nowy punkt co X sekund ...

for(var i = 0; i<markers.length; i++){ 
        graph[i] = ['', parseInt(markers[i].getAttribute("alt"))]; 
       } 

       var chart = new google.visualization.LineChart(document.getElementById('chart_div')); 
       dataTable.addColumn('string', 'id'); 
       dataTable.addColumn('number', 'Altitude'); 

       var array = []; 
       for(var i = 0; i<graph.length; i++){ 
        console.log('in loop'); 
         setTimeout(function(y){ 
         array.push(graph[y]); 
         dataTable.addRows(a);    
         chart.draw(dataTable, options); 
         array = []; 
        }, i*5000, i); 
       } 
3

proste podejście oparte na dokładnym kodu będzie:

(function redraw() { 
    drawAltitudeChart(); 
    setTimeout(redraw, 20000); 
})(); 

Dla bardziej dogłębne i konfigurowalny podejścia: (zrobiłem to ma tylko podstawową wiedzę z API wykresów.)

function AltitudeChart() { 
    this.chart = new google.visualization.LineChart(
     document.getElementById('curve_chart') 
    ); 
} 

AltitudeChart.prototype = { 
    draw: function() { 
     var graph = []; 
     downloadUrl('Map.php', function(data) { 
      var xml  = data.responseXML; 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      var dataTable = new google.visualization.DataTable(); 
      var options = { 
       title: 'Altitude (m above sea level)', 
       curveType: 'function', 
       legend: { position:'bottom' }, 
       is3d: true  
      }; 

      for (var i = 0; i < markers.length; i++) { 
       graph[i] = ['', parseInt(markers[i].getAttribute("alt"))]; 
      } 

      dataTable.addColumn('string', 'id'); 
      dataTable.addColumn('number', 'Altitude'); 
      dataTable.addRows(graph); 

      this.chart.draw(dataTable, options); 
     }); 
    }, 

    refreshDraw: function() { 
     this.drawTimeout = setTimeout(function() { 
      this.draw(); 
      this.refreshDraw(); // recursive call 
     }.bind(this), 20000); // every 20 seconds 
    } 
}; 

new AltitudeChart().refreshDraw(); 

Jestem pewien, że jest lepszy sposób na zrobienie tego z bardziej intymnym znajomość API wykresów, ale logika powinna działać.

+0

to wygląda dobrze na odświeżenie z oryginalnego źródła, jest trochę przesadą, ale powinno działać, jak mówisz. wymagania nie są jasne. btw, myślę, że przegapiłeś deklarację dla 'wykresu' ... – WhiteHat

+0

@WhiteHat Rzeczywiście zrobiłem, dzięki za to. I może nawet przesada, ale jeśli kiedykolwiek planuje zrobić z tym więcej, wtedy to podejście jest dobrym wyborem. Dzięki za opinie. –

Powiązane problemy