1

この奇妙な行動について助けを得ようとしています。

ハイチャートチャート、複数のシリーズなどをすべてセットアップすることができました。インライン配列から静的な値を使用すると、値はチャートに正しく割り当てられますが、数値を csv ファイルから引き出すと、アラート メッセージで実行を一時停止しない限り割り当てられません。以下のコードを参照してください

$(function () {

        // every row on report needs
        // category defined (left side)
        var mycategories = [];

        // every column on report needs
        // seriesname defined
        var headers = [];
        var myseriesnames = []; 

        var lines = [];
        var line_tokens = [];

        // Read data from csv file
        $.get('top10raj.csv', function(data) { 

        // Split the lines
        lines = data.split('\n');
        console.log("First line : "+ lines[0]);

        headers = lines[0].split(',');
        for (var i = 1; i < headers.length; i++) {
            myseriesnames.push(headers[i]);
        }

        //
        // display all lines 
        //
        for (var i = 1; i < lines.length; i++) {

            line_tokens = lines[i].split(',');

            console.log('Equip.No:' + line_tokens[0].trim());   // Equipment Number
            console.log(line_tokens[1].trim());                 // ActualCost
            console.log(line_tokens[2].trim());                 // ActualMaterial
            console.log(line_tokens[3].trim());                 // ActualLabor
            console.log(line_tokens[4].trim());                 // ActualOther

            mycategories.push(line_tokens[0].trim());

            }

        });

        alert('report ready');

        var myarray = [7,6,7,8,7,8,3,4,1,4,7,8,7,5];

        var serObj = [{ 'name': myseriesnames[0], 
                        data:[8,9,8,6,5,2,3,6,5,7,4,5,8,9]
                        },
                    {   'name': myseriesnames[1], 
                        data:[8,5,6,9,8,7,4,5,2,5,8,7,8,6]
                        },
                    {   'name': myseriesnames[2], 
                        data: myarray
                        },
                    {   'name': myseriesnames[3], 
                        data: myarray
                    },                  
            ];

        var chart = new Highcharts.Chart({
            chart: {
                renderTo:'container',
                type: 'column'
            },
            title:{
                text:'Chart Title'
            },
            tooltip:{
                    formatter:function(){
                        return '<b>' + this.series.name + '</b>' +          
                        '<br/><b>Item Number:</b> ' + this.x +                  // X Value
                        '<br/><b>Amount:</b> ' + this.y +                       // Y Value
                        '<br/><b>Other Data:</b> ';// + this.point.note;
                    }
            },          
            credits:{enabled:false},
            legend:{
            },
            plotOptions: {
                series: {
                    shadow:false,
                    borderWidth:0
                }
            },
            xAxis:{
                // Need to define categories for every row 
                // on the report (left side)
                categories: mycategories,
                lineColor:'#999',
                lineWidth:1,
                tickColor:'#666',
                tickLength:3,
                labels: { rotation:45, align:'left'},
                title:{
                    text:'Equipment', 
                }
            },
            yAxis:{
                lineColor:'#999',
                lineWidth:1,
                tickColor:'#666',
                tickWidth:1,
                tickLength:3,
                gridLineColor:'#ddd',
                title:{
                    text:'Amount (USD)',
                    rotation:-90,
                    margin:50,
                }
            },    
            series: serObj


        });

});

EqptNumber,ActualTotal,ActualMaterial,ActualLabor,ActualOther,
111.3207B,666693.61,606564.37,53866.49,6262.75,
106.3355,588647.91,240175.91,322779.00,25693.00,
106.3307,364234.86,266598.36,97636.50,0,
125.L8702A,356025.49,347519.49,8506.00,0,
122.E8801A,340712.89,25483.39,33729.50,281500.00,
127.E2201,319372.29,112362.97,307731.88,100722.56,
107.3251A,310587.25,316225.36,35496.50,41134.61,
622.CW88105,307762.86,7957.36,299805.50,0,
133.1203A,307285.20,40273.19,249658.01,17354.00,
106.3352,278737.48,132009.49,146728.00,0.01,
107.3251ACC,310587.25,316225.36,35496.50,41134.61,
622.CW88105CC,307762.86,7957.36,299805.50,0,
133.1203ACC,307285.20,40273.19,249658.01,17354.00,
106.3352CC,278737.48,132009.49,146728.00,0.01,

私が使用している csv ファイルは、ソースの下部に示されています。

次の行の場合

alert('report ready');

コメントアウトすると、すべてのカテゴリラベルが失われ、X 軸に沿って 0..1,2,3.. などに置き換えられます。なぜこれが起こっているのかを理解しようと懸命に努力していますが、今のところ修正できていません。動的データで Highcharts ライブラリを使用したいのですが、事前定義された配列の静的データのみを使用することは非常に制限されているため、これで得られる助けに感謝します。

4

1 に答える 1

1

問題は、csv ファイル ( $.get ) のリクエストが非同期で実行されることです。つまり、データが返される前に残りのコードが実行されます。コードをコールバック関数に移動してみてください。

//..your code
mycategories.push(line_tokens[0].trim());

            }
      //moved your code here
      var myarray = [7,6,7,8,7,8,3,4,1,4,7,8,7,5];

        var serObj = [{ 'name': myseriesnames[0], 
                        data:[8,9,8,6,5,2,3,6,5,7,4,5,8,9]
                        },
                    {   'name': myseriesnames[1], 
                        data:[8,5,6,9,8,7,4,5,2,5,8,7,8,6]
                        },
                    {   'name': myseriesnames[2], 
                        data: myarray
                        },
                    {   'name': myseriesnames[3], 
                        data: myarray
                    },                  
            ];

        var chart = new Highcharts.Chart({
            chart: {
                renderTo:'container',
                type: 'column'
            },
            title:{
                text:'Chart Title'
            },
            tooltip:{
                    formatter:function(){
                        return '<b>' + this.series.name + '</b>' +          
                        '<br/><b>Item Number:</b> ' + this.x +                  // X Value
                        '<br/><b>Amount:</b> ' + this.y +                       // Y Value
                        '<br/><b>Other Data:</b> ';// + this.point.note;
                    }
            },          
            credits:{enabled:false},
            legend:{
            },
            plotOptions: {
                series: {
                    shadow:false,
                    borderWidth:0
                }
            },
            xAxis:{
                // Need to define categories for every row 
                // on the report (left side)
                categories: mycategories,
                lineColor:'#999',
                lineWidth:1,
                tickColor:'#666',
                tickLength:3,
                labels: { rotation:45, align:'left'},
                title:{
                    text:'Equipment', 
                }
            },
            yAxis:{
                lineColor:'#999',
                lineWidth:1,
                tickColor:'#666',
                tickWidth:1,
                tickLength:3,
                gridLineColor:'#ddd',
                title:{
                    text:'Amount (USD)',
                    rotation:-90,
                    margin:50,
                }
            },    
            series: serObj


        });


        });

        //here's where  the alert used to be
       ///alert('report ready');
});
于 2012-10-16T20:27:53.313 に答える