2012-12-28 3 views
1

하나가없는 경우 시리즈를 추가하는 동적으로 생성 된 차트를 만드는 중입니다. 하나가 있다면 점을 추가합니다. Uncaught TypeError가 나타납니다 : 정의되지 않은 'addSeries'메서드를 호출 할 수 없습니다. 나는 주변을 둘러 보았고 그 방법이 정의되지 않았다고 말하는 이유를 찾을 수 없다. 문서 준비 기능은 전체 스크립트를 복용addchart 동적으로 시리즈를 추가하는 더 많은 차트

<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: [] 
    }); 

나는 다음과 같은 기능을 가지고 있습니다

나는 내가 도망 내 chartCreate에 도착하면 그것의 좋은 아약스 함수 호출을 사용할 수있어
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; 
}; 

문제에.

답변

1

chart1 전에 차트를 참조하기 전에 세리에를 추가하려고하는 것이 문제입니다. 그래서 chart1에는 addSeries 방법이 없습니다.

이 문제는 here에서 볼 수 있습니다.

전화 번호 requestData으로 전화하기 전에 수동으로 차트 참조 번호를 chart1으로 설정할 수 있습니다.
다음과 같이하십시오.

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

이렇게했습니다. 덕분에 나는 그것이 그것이 참조 된 방법 이어야만한다는 것을 알았다는 것을 알기 위해 고심하고있었습니다. – willJk

+0

@willJk 도와 드리겠습니다. :) –

관련 문제