【问题标题】:Highcharts ajax not workingHighcharts ajax不工作
【发布时间】:2015-06-08 22:00:45
【问题描述】:

我发现 highcharts 是一个可以在演示示例之外工作的思维领域。在查看 stackoverflow 时,有大量示例以多种不同方式针对许多不同情况完成。

我尝试了一些代码来让它工作,但无济于事。

我正在尝试加载图表以每隔几秒重新加载和更新图表。我得到了 ajax 调用来工作,数据要通过并每隔几秒钟调用一次。但我想不出一种让 highcharts 获取数据并构建图表的方法。

这是ajax传回来的数据,是Multi Series的结果

[{"name":"One","data":[[1433203200000,0],[1433289600000,0],[1433376000000,0],[1433462400000,0],[1433548800000
,0],[1433635200000,31.48],[1433721600000,0]]},{"name":"Two","data":[[1433203200000,0],[1433289600000
,0],[1433376000000,0],[1433462400000,0],[1433548800000,0],[1433635200000,0],[1433721600000,0]]}]

这是highchart代码,我做错了什么?

chart = new Highcharts.Chart({
    chart: {
        renderTo: 'final',
        defaultSeriesType: 'spline',
        events: {
            load: function()
            {
              setTimeout(function(){
                 $.ajax({
                    url: 'test',
                    type: 'GET',
                    async: true,
                    dataType: "json",
                    success: function (data) {
                      console.log(data);
                      chart.setData(data,true);
                        //chart.setData(data,true);
                    }
                  });
              }, 10000);                  
            }
        }
    },
    title: {
        text: 'Live random data'
    },
    xAxis: {
        type: 'datetime',
        tickPixelInterval: 150,
        maxZoom: 20 * 1000
    },
    yAxis: {
        minPadding: 0.2,
        maxPadding: 0.2,
        title: {
            text: 'Value',
            margin: 80
        }
    },
    series: []
});

【问题讨论】:

  • 发布您的 php 或服务器端代码
  • 嗨,Hanoncs 是重要的服务器端代码,因为原始代码需要做大量与问题无关的计算。输出就是上面列出的内容,我正在尝试将该输出放入 Highcharts
  • 是的,这很重要,您需要使用json_encode返回数据
  • 仅供参考...在 stackoverflow 上,您可以将您喜欢或对您有帮助的东西用箭头标记出来,如果它回答了您的问题,请勾选复选标记。
  • 好酷,但仍在寻找答案。我仍然不知道如何让多系列来构建图表。我将不得不做更多的挖掘工作

标签: javascript jquery ajax highcharts


【解决方案1】:

两件事:

1) setTimeout 只被调用一次。您可能想使用setInterval

2) 没有像chart.setData() 这样的方法。有series.setData()。打开演示并查看它是如何使用的。在你的情况下,回调应该是这样的:

        load: function() {
          var myChart = this;
          setInterval(function() {
             $.ajax({
                url: 'test',
                type: 'GET',
                async: true,
                dataType: "json",
                success: function (data) {
                  $.each(data, function(i, d) {
                      if(myChart.series[i]) {
                          myChart.series[i].setData(d.data,false, false);
                      } else { // series doesn't exist
                          myChart.addSeries(d, false);
                      }
                  });
                  myChart.redraw(true);
                }
              });
          }, 1000);                  
        }

【讨论】:

  • 这看起来很接近,看起来您正在单独设置系列。在您的示例中,如果现在有 4 个系列从 DB 发回。您是否必须手动将它们设置为系列 2 和 3。我猜现在您可以执行某种形式的循环?
  • 是的,您可以使用for() 循环遍历所有系列。我只注意到一件事,您的 series 数组是空的。应该有一些系列定义为使用setData()。或者当系列不存在时使用addSeries()。查看更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多