2016-04-25 7 views
0

Ich habe versucht, eine dynamische Heatmap durch Aufrufen von Code hinter methodw, die die Daten an die Heatmap liefert erstellen. Ich habe einen Timer, der die Funktion GetNewHeatMapDataTable() aufruft. Die Funktion ruft neue Daten ab und verschiebt sie in ein vorhandenes Array (pointArray), um die Map dynamisch zu aktualisieren. Der Timer läuft wie erwartet. Der Wert der Variablen newheatmapdata ändert sich jedoch nicht und die Funktion ruft nur einmal den Code hinter Methode GetIAHeatMapDataTable ("XXXXXXX") auf. Ich bin mir nicht sicher, was ich falsch mache. Ich hoffe, dass jemand mich in die richtige Richtung weisen kann.Javascript-Timer ruft einen Code hinter Methode nur einmal

Unten finden Sie ein Ausschnitt aus meinem Code

var heatmapData = []; 
function GetDataTableFromCodeBehind() { 

     heatmapData = <%=GetIAHeatMapDataTable("XXXXXXX")%>;       
    }   


var pointArray = new google.maps.MVCArray(heatmapData); 
    var heatmapLayer = new google.maps.visualization.HeatmapLayer({ 
     data: pointArray, 
     dissipating: false, 
     radius: 0.00001 
    }); 

function GetNewHeatMapDataTable() {    
     var newheatmapdata = [] 
     newheatmapdata = <%=GetIANewHeatMapDataTable("XXXXXXX")%>;    

     if (newheatmapdata.length > 0){ 

      for (i = 0; i < newheatmapdata.length; i++) { 
       pointArray.push.apply(pointArray, newheatmapdata);      
      } 
     }         
    } 
setInterval(function() {GetNewHeatMapDataTable();},3000); 

Vielen Dank im Voraus.

+1

Sie können keine Server-Methode wie die von dem Client aufrufen schieben, müssen Sie einen AJAX-Aufruf an den Server machen. Das JavaScript kennt die serverseitige Methode nicht. Alles, was Sie mit dem aktuellen Code tun, ist, die Methode einmal aufzurufen, während Sie die Seite generieren. – Stephen

+0

Sie sehen einen anderen Wert von GetIANewHeatMapDataTable ("XXXXXXX") – brk

+0

Hallo user2181397, Ich sehe keine anderen Werte. Ich bin in der Lage, die Methode aufzurufen und Data Array nur einmal erfolgreich zu erhalten. Sobald der Timer das Intervall erreicht, wird die Methode GetIANewHeatMapDataTable ("XXXXXXX") nicht mehr aufgerufen und der Initialwert der Variablen newheatmapdata ändert sich nicht – darwin25

Antwort

0

Gelöst: Vielen Dank Stephen. Ich tat genau so, wie du es vorgeschlagen hast. Lief wie am Schnürchen. Das ist mein neuer Code ist es, neue Daten für das Abrufen und an die Heatmap

function fetchNewData() {  
      $.ajax({ 
       type: "POST", 
       url: "Webform1.aspx/GetIANewHeatMapDataTable", 
       data: JSON.stringify({ level: "XXXXXXX" }), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       async: false, 
       success: function(data) {      
        var newheatmapdata = [] ; 
        newheatmapdata = eval('(' + data.d + ')'); 

        if (newheatmapdata.length > 0){  
         for (i = 0; i < newheatmapdata.length; i++) {         
          pointArray.push.apply(pointArray, newheatmapdata);          
          heatmapLayer.setData(pointArray); 
         } 
        }        
       }, 
      }); 

     } 
    setInterval(function() {fetchNewData();},1000);