2013-04-25 59 views
3

我試着用下面的代碼設置Highcharts系列和類別的數據動態

$j(document).ready(function() { 
    $j("#filter").click(function() { 
     BuildReport(); 
    }); 

    $j("#container").highcharts({ 
     chart: { 
      type: 'column', 
      marginRight: 130, 
      marginBottom: 100 
     }, 
     title: { 
      text: 'SEs open by Group', 
      x: -20 //center 
     }, 
     yAxis: { 
      title: { 
       text: '' 
      }, 
      min: 0, 
      allowDecimals: false 
     }, 
     xAxis: {}, 
     tooltip: { 
      formatter: function() { 
       return '<b>' + this.x + '</b><br/>' + 
          this.series.name + ': ' + this.y + '<br/>' + 
          'Total: ' + this.point.stackTotal; 
      } 
     }, 
     plotOptions: { 
      column: { 
       stacking: 'normal', 
       cursor: 'pointer', 
       } 
      } 
     }, 
     legend: { 
      layout: 'vertical', 
      align: 'right', 
      verticalAlign: 'top', 
      x: -10, 
      y: 100, 
      borderWidth: 0 
     }, 
     series: {} 
    }); 

    BuildReport(); 
}); 

function SetChartSeries(series) { 
    debugger; 
    chart = $j("#container").highcharts(); 
    chart.xAxis[0].setCategories(getReportCategories(series)); 
    chart.series = $j.map(series, function (item) { 
     return { 
      name: item.Name, 
      color: item.Colour, 
      data: $j.map(item.Items, function (list) { 
       return { 
        name: list.Category, 
        y: list.Value, 
        id: list.ID 
       }; 
      }) 
     }; 
    }); 
} 

function getReportCategories(data) { 
    var catArray = []; 
    $j.each(data, function (index, value) { 
     $j.each(value.Items, function (index, value) { 
      if ($j.inArray(value.Category, catArray)) { 
       catArray.push(value.Category); 
      } 
     }); 
    }); 

    return catArray; 
} 

function BuildReport() { 
    $j.ajax({ 
     url: "ChartDataHandler.ashx", 
     dataType: "json", 
     cache: false, 
     success: function (data) { 
      SetChartSeries(data.Series); 
     } 
    }); 
} 

頁面加載或過濾器按鈕被點擊BuildReport調用處理程序,並通過了一系列數據來更新通過Ajax調用圖表SetChartSeries。從這裏我可以看到圖表屬性已設置,但圖表從未繪製。我做了什麼明顯錯誤?

+0

您是否嘗試將AJAX方法更改爲POST? – melancia 2013-04-25 15:07:44

+0

那好像不是問題所在。數據從AJAX調用中恢復得很好。以前,我在ajax調用的成功處理程序中創建了具有series和category屬性的圖表,並且此工作正常,但是隻需創建一次圖表,然後使用每個新的ajax調用更新類別和系列數據。 – 2013-04-25 15:28:29

+0

有一些頭痛,直到我更多地瞭解Highcharts如何工作。也許重繪圖表? chart.redraw() – melancia 2013-04-25 15:32:08

回答

1

如果你想創造新的系列,你需要使用Chart.addSeries()方法

如果你想在你需要使用Series.setData() 方法現有系列設置新的數據。

依我之見,你爲每個請求創建新的系列,如果你想動態設置類別數據使用addSeries方法

0

,你需要使用Axis.update()方法

chart.xAxis[0].update({categories:arrayname,tickInterval:20},true);