2

我正在尝试远程解析以下 JSON 字符串:

[{"name":"Object1","data":[1,2]},{"name":"Object2","data":[3,4]}]

我正在使用以下代码这样做:

$(function () {
  var chart;
  $(document).ready(function() {
    var options = {
      chart: {
        renderTo: 'container',
        type: 'line',
        marginRight: 130,
        marginBottom: 25
      },
      title: {
        text: 'hits by time',
        x: -20 //center
      },
      subtitle: {
        text: 'Source:',
        x: -20
      },
      xAxis: {
        categories: ['8am', '9am', '10am', '11am', '12pm', '1pm',
        '2pm', '3pm', '4pm', '5pm', '6pm', '7pm']
      },
      yAxis: {
        title: {
          text: 'Hits'
        },
        plotLines: [{
          value: 0,
          width: 1,
          color: '#808080'
        }]
      },
      tooltip: {
        formatter: function() {
          return '<b>'+ this.series.name +'</b><br/>'+
          this.x +': '+ this.y;
        }
      },
      legend: {
        layout: 'vertical',
        align: 'right',
        verticalAlign: 'top',
        x: -10,
        y: 100,
        borderWidth: 0
      },
      series: []
    };  

    $.getJSON('http://localhost:8080/jsonget', function(data) {

      var series = {
        data: []
      };

      $.each(data, function(i,item){
        alert(item.name);
        series.name = item.name;
        $.each(item.data, function(j,dataitem){
          alert(dataitem);
          series.data.push(parseFloat(dataitem[i]));                  
        });
      });

      options.series.push(series);    

      // Create the chart
      var chart = new Highcharts.Chart(options);
    });
  });
});

该图表不会呈现,但是当我用远程部分替换站点上的 CSV 示例时会呈现。

有谁知道问题是什么?

4

3 回答 3

5

据我所知,您data的格式似乎很好。所以,这应该这样做:

var chart;
$.getJSON('http://localhost:8080/UDPver/tagdiscover', function(data) {
  // Populate series
  options.series = data;    
  // Create the chart
  chart = new Highcharts.Chart(options);
});
于 2012-04-06T05:59:42.173 回答
2

问题是图表随后被重新绘制。因此,如果您有其他被禁用的行(来自图例),则在您进行更新时它将再次可见。我的图表中有 5 条线。它每秒更新一次。从图例中,我可以禁用/删除图表中的一些线。但是使用上面的这种方法(它有效)重新绘制了完整的图形,并且所有线条都再次可见。是否可以只更新系列(行)而不是参数?

像这样(不工作):

function doAjaxData() {
            AjaxLoadingIcon(1);
            $.ajax({
                url: getAjaxUrl(1),
                dataType: 'json',
                cache: false,
                async: true,
                success: function (json) {
                    AjaxLoadingIcon(0);
                    gchartOptions.series = [];
                    gchartOptions.series = json;
                    // gchart = new Highcharts.Chart(gchartOptions);
                    gchart.render();
                    _updateTimer = window.setTimeout("doAjaxData()", 1000);
                    }
                }
            });
        }
于 2013-01-05T00:27:39.427 回答
0

阿特玛。你应该只写dataitem而不是dataitem[i]它会起作用。

  $.each(data, function(i,item){
    alert(item.name);
    series.name = item.name;
    $.each(item.data, function(j,dataitem){
      alert(dataitem);
      series.data.push(parseFloat(dataitem[i]));                  
    });
  });
于 2013-01-11T12:01:25.803 回答