JQuery $ .ajax没有带来最新数据

时间:2013-05-01 06:14:25

标签: c# jquery highcharts

我正在使用JQuery 1.7.2。我正在使用高图制作实时数据图表。 我做了一个C#页面,在页面上加载我正在写一些jSON格式数据,我正在另一个页面中使用帮助ajax调用highcharts。我将在函数内运行ajax调用,并且在ajax调用的成功事件中,我将在1分钟后再调用setTimeout来调用函数,所以每次都会得到最新的数据。直到这里一切都很好。

但我有问题让我说数据我每1分钟只获得4小时的数据,而不是让我的浏览器打开并且第二天来。那个时候我的aspx页面将从零开始新的新数据开始,所以我的highcharts应该自动删除所有点并且应该推送新数据但是它没有这样做。当我刷新我的页面时,一切都将开始运作良好。无论如何它应该自己刷新

我的ajax调用代码如下

    function recieveData() {
    var pathArray = window.location.pathname.split( '/' );
    var chart = $('#container').highcharts();
        $.ajax({
            url: '/' + pathArray[1] + '/HomePageChartData.aspx',
            dataType: 'json',
            cache: false,
            success: function (data) {
              chart.yAxis[0].setExtremes(data.minY, data.maxY, true, true);
              chart.series[1].setData([]);
              chart.series[1].name = data.lineSeriesName;

              chart.series[0].setData([]);
              chart.series[0].name = data.areaSeriesName;

              for (var x in data.lineSeriesData) {
                chart.series[1].addPoint([data.lineSeriesData[x][0], data.lineSeriesData[x][1]]);
              }

              for (var x in data.areaSeriesData) {
                chart.series[0].addPoint([data.areaSeriesData[x][0], data.areaSeriesData[x][1]]);
              }
              setTimeout(recieveData, 60000);
            }
          });
}

@@编辑了更多解释 看起来我以前不能正常,所以我会再做一次。我的方案就像数据在上午9点到下午12点30分之间,它一直保留在数据库中,直到第二天上午7点。所以我的高清图将在上午9点到下午12点30分之间每分钟获得数据,这是非常好的,没有任何问题。但是当我们在第二天早上7点清除所有数据并且我们在上午9点开始获取新数据时,问题就出现了,我的高图表并没有自行清理并开始获取新数据。

但是,如果我刷新浏览器,我将获得新数据并且效果很好。所以我看起来像是在擦除所有数据,我的ajax应该提醒并重新加载页面或从高清图中清除数据。

所以我在ajax调用中寻找一些事件或方法。专家的一些指导。

2 个答案:

答案 0 :(得分:0)

尝试在$ .ajax调用中使用data参数发送时间,它将区分您的每个ajax调用

data:{'time': new Date().getSeconds() }

答案 1 :(得分:0)

您可以将实际时间与第二天进行比较,计算间隔,然后将超时设置为重新加载页面,代码段:

var now = new Date(),
    time = (new Date(now.getFullYear(), now.getMonth(), now.getDate()+1), 7).getTime() - now.getTime(); //calculate next day 00:07:00 in ms

setTimeout(function () {
    document.location.reload(true);
}, time);