Javascript 计时器只调用一次 Code 隐藏方法

Javascript timer calls a Code behind method only once

本文关键字:一次 Code 隐藏 方法 计时器 调用 Javascript      更新时间:2023-09-26

>我正在尝试通过调用向热图提供数据的 methodw 背后的代码来创建动态热图。我有一个调用函数GetNewHeatMapDataTable()的计时器。该函数获取新数据并将其推送到现有数组 (pointArray) 以动态更新地图。计时器按预期运行。但是,变量 newheatmapdata 的值不会更改,并且该函数仅调用隐藏方法 GetIAHeatMapDataTable("XXXXXXX") 的代码一次。我不确定我做错了什么。我希望有人能为我指出正确的方向。

下面是我的代码片段

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);

提前谢谢。

已解决:非常感谢斯蒂芬。我按照你的建议做了。像魅力一样工作。这是我的新代码,用于获取新数据并将其推送到热图

    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);