2

私のコードはコンソールで機能していますが、ウェブサイトをロードするときは機能していません。

function getData() {
    var a = [];
    d3.csv("../csv/master.csv").get(function (error, rows) {
        for (var i = 0; i < rows.length; i++) {
            a.push(rows[i]);
        }
    });
    return a; 
}
a = getData();
alert(a[0].agency);

奇妙なことに、変数 a は、コンソールで呼び出すことができるため、Web サイトによってロードされているように見えますが、アラートはエラーをスローします。

("Uncaught TypeError: Cannot read property 'agency' of undefined")

ただし、コンソールでまったく同じアラートを呼び出すと、完全に機能します。

何か案は?

ありがとう、

ジョナス

4

1 に答える 1

4

このd3.csvメソッドは非同期リクエストを発行するため、Web サイト版では、データにアクセスしようとすると、csv ファイルがまだ完全に読み込まれていない可能性があります。おそらくコードを再編成し、データに依存するロジックをコールバック関数内に配置する必要があります。データの読み込みが完了したときにイベントをトリガーし、別のオブジェクトがそのイベントをリッスンして描画を開始することもできます。

d3.csv('../csv/master.csv', function(error, rows) {
    // The data is available here
    alert(rows[0].agency);
});

詳細についてd3.csvは、ドキュメントを参照してください。

EDIT : @elclanrs が指摘したように、以前のコードでは、投稿されたコードを再編成する必要があることを説明できなかったため、回答を更新しました。

于 2013-05-29T00:12:05.227 に答える