5

これは私の最初の投稿ですが、このコミュニティに参加することに興奮しています。完全に困惑している JavaScript に関する質問があります。

ajax を使用してサーバーからデータを取得し、グラフに追加する JavaScript アプリケーションを作成しています。フレームワークとして Jquery と Highcharts を使用し、Highcharts の周りに独自の JavaScript 'wrapper' を作成してインターフェイスを作成しています。

processData 関数が jSON 応答でコールバックされると、i は初期化も宣言もされていないにもかかわらず、i=1 で開始されます。他の変数も同様に設定されます。(Chrome開発者ツールを使用してデバッグすることでこれを知っています)。これにより、ループが実行されず、データがグラフに追加されません。

表示するコードの量はわかりませんが、これらは最も関連性の高い部分です。必要に応じてさらに追加できます。

function getData(series, min, max, numpts) {
        if (series === undefined) {
            console.log("error on getData");
            return;
        }

        var request = {};
        request.series = series;

        if (min !== undefined) {
            request.start = min;
        } //in seconds
        if (max !== undefined) {
            request.end = max;
        } 
        if (numpts !== undefined) {
            request.numpts = numpts;
        }
        $.getJSON('/data', request, processData);
        return;
    }

    function processData(data) {
        // handle the data after it comes back from an ajax request
        var curSeries,
            chartSeries,
            curPoint;

        for (var i = 0; i < data.length; i ++) {
            curSeries = data[i];
            chartSeries = chart.get(curSeries.name);

            if (chartSeries === null) {
                //alert("oops");
                chart.addSeries(curSeries);
            } else {
                for (var j = 0; j < curSeries.data.length; j ++) {
                    curPoint = curSeries.data[j];
                    chartSeries.addPoint(curPoint, false);
                }
            }
        }
        chart.redraw();
    }

これらは両方とも、グラフと呼ばれる、私が宣言したクラスのメソッドです。

誰かアイデアがあればよろしくお願いします!-マットP

4

1 に答える 1

2

iが事前に宣言されていても、そのループは正常に機能するはずなので、データオブジェクトを調べて期待どおりであることを確認します。とにかく、ループの開始時に 0 を割り当てています。

i を定義して初期化する前にiを定義して初期化すると考えることができる唯一の理由は、コードベースの他の場所でivarキーワードで初期化しない場合です。これを行うと、グローバル スコープ (ウィンドウオブジェクト) にダンプされ、コードベース内のすべての関数でクロージャーを介して使用できるようになります。

ファイルのいずれにもない場合は、highcharts グラフ作成ライブラリにある可能性があります (この場合、そのライブラリからすぐに実行してください)。

于 2010-07-24T17:17:17.190 に答える