0

alert("inside function: " +data);以下でコメントアウトされている場合、データ行はグラフに表示されませんが、コメントが解除され、ユーザーがアラートを閉じると、グラフにデータセットが入力されます。
が呼び出されるまでにデータが完全にロードされていない可能性があり$.plotますか?

[01:05:21.158] TypeError: myfile is undefined @ http://localhost:8080/App/js/App.js:7

脚本 ..

$(function() {

    var plotarea = $("#placeholder"),
        myfile = Script_JSON.getData("myfile"),
        anotherfile = Script_JSON.getData("anotherfile");

    $.plot(plotarea, [myfile.data, anotherfile.data]);
}); 

var Script_JSON = {

    getData: function(component) {

        var data;

        $.getJSON("data/" + component + ".json", function(json) {

            data=json;
        });

        //alert("inside function: " +data);

        return data;
    }
};
4

2 に答える 2

3

これには重複した質問がたくさんありますが、非常に直接的な答えはありません.

AJAX リクエスト (getJSON など) は非同期です。呼び出しを行うとすぐに戻りますが、指定した成功関数はしばらくしてから呼び出されます。これは、リクエストに応じて、数ミリ秒から数秒の範囲になります。

そのため、結果がすでに到着していることを期待して、次の行で plot を呼び出すことはできません。成功のコールバック内にプロットする必要があります。

あなたのケースでは、2 つの別々のロードがある場合、もう一方の結果がすでに到着しているかどうかをそれぞれチェックインする必要があります。もしそうなら、あなたはプロットすることができます。それ以外の場合は、戻って他のコールバックに処理させる必要があります。

于 2013-10-28T01:25:23.763 に答える