2012-12-28 48 views
1

我正在创建一个动态创建的图表,将添加一系列,如果没有一个,如果有一个添加一个点。我得到一个Uncaught TypeError:无法调用未定义的方法'addSeries'。我环顾四周,我找不到为什么它说方法是未定义的。highcharts动态添加系列与addSeries

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script> 
<script type="text/javascript" src="highcharts.js"></script> 
$(document).ready(function() { 

    var chart1 = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container', 
      type: 'column', 
      events: { 
       load: requestData 
      } 
     }, 
     title: { 
      text: 'Survey Chart' 

     }, 
     xAxis: { 
      categories: [], 
      title: { 
       text: 'Question Number' 
      } 

     }, 
     yAxis: { 
      title: { 
       text: 'Total Answered' 
      } 
     }, 
     legend: { 
      layout: 'vertical', 
      align: 'left', 
      verticalAlign: 'top', 
      x: 100, 
      y: 70, 
      floating: true 
     }, 
     series: [] 
    }); 

与文档准备功能占用了整个剧本,我有以下功能

function requestData() { 
    ajaxCall(chartCreate, createSeries, "services/Survey.svc/DoWork", "{}"); 
    chart1.redraw(); 
}; 


function chartCreate(point) { 
    var temp; 
    temp = $.parseJSON(point.d); 
    $.each(temp, function (key, p) { 
     var seriesObj; 
     seriesObj = seriesExists(p.mcAnswer); 
     if (seriesObj.status == false) { 
      chart1.addSeries({name: '' + p.mcAnswer + '', data: [] }); 
      chart1.series[seriesObj.count].addPoint(p.total, false); 
     } else { 
      chart1.series[seriesObj.count].addPoint(p.total, false); 
     } 
    }); 
}; 

//loops through all the series to see if the series exists. 
//if true returns index and true if not just returns false 
function seriesExists(name) { 
    var ct = 0; 
    //var len = chart1.series.length; 
    var len = 0; 
    if (len > 0) { 
     $.each(chart1.series, function (count, curSeries) { 
      if (curSeries.name == name) { 
       return { 'count': count, 'status': true }; 
      } 
      ct = count; 
     }); 
    } 
    return { 'count': ct, 'status': false }; 
}; function createSeries() { 
    alert("error"); 
}; 

//$.ajaxCall({successFun: function, errorFun: function, source: "", data: {}}); 
function ajaxCall(myFunSuccess, myFunError, url, data) { 
    //chart1 = chartTemp; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: url, 
     data: data, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: myFunSuccess, 
     error: myFunError 
    }); 
    //return chart1; 
}; 

我能使用AJAX函数调用罚款是,当我到达我的chartCreate,我跑进入问题。

回答

1

问题是,您正在尝试在chart1之前添加系列,以获取您的图表参考。这就是为什么chart1 doens't没有addSeries方法。

您可以看到此问题here

要修复它,您可以在致电requestData之前手动设置图表参考chart1
像下面这样。

load: function() { 
    chart1 = this; // `this` is the reference to the chart 
    requestData(); 
} 
+0

工作正常!谢谢我一直在努力弄清楚,我知道它必须是它被引用的。 – willJk

+0

@willJk我很乐意帮助你:) –