1

シリーズがない場合はシリーズを追加し、シリーズがある場合はポイントを追加する、動的に作成されたグラフの作成に取り組んでいます。Uncaught TypeErrorが発生します:undefinedのメソッド'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;
};

問題が発生したchartCreateに到達したときに、ajax関数呼び出しを正常に使用できます。

4

1 に答える 1

1

chart1問題は、チャート参照を取得する前にシリーズを追加しようとしていることです。そのため、chart1メソッドがありませんaddSeries

この問題はここで確認できます。

chart1これを修正するには、を呼び出す前にチャート参照を手動で設定できますrequestData
次のように。

load: function() {
    chart1 = this; // `this` is the reference to the chart
    requestData();
}
于 2012-12-28T19:19:00.913 に答える