2

Firebugに入力するスクリプトは次のとおりです。

var jsonData;

$.getJSON("./js/ohno.JSON",function(data){
    jsonData = data;
});

console.log(jsonData);

.JSONファイルの内容は次のとおりです。

{"oh":"no"}

Firebugで初めてスクリプトを実行すると、「undefined」が返されます

2回目に(ページを更新せずに)実行すると、オブジェクトが返されます。

更新すると、同じことが起こります。最初に実行すると「未定義」が返され、2回目に実行するとオブジェクトが返されます。

.JSONファイルは

スクリプトを初めて実行したときにオブジェクトが返されるようにするにはどうすればよいですか?

4

5 に答える 5

9

getJSONは非同期です。これは、データをロードしている間、スクリプトの実行が続行されることを意味します。

あなたはそれが終わるまで待たなければなりません。

var jsonData;

$.getJSON("./js/ohno.JSON",function(data){
    jsonData = data;
    console.log(jsonData);
});
于 2013-01-17T22:47:02.753 に答える
4

コールバック関数内にconsole.log(および実行するその他のコード)を配置する必要があります。data

$.getJSON("./js/ohno.JSON",function(data){
    jsonData = data;
    console.log(jsonData);
});

.ajaxComplete別々に保管する必要があると感じた場合にも使用できます。

于 2013-01-17T22:47:07.400 に答える
3

getJSONは非同期であるため、データを処理するためにコールバックを提供する必要があります。リクエストは実行されますが、に到達するまでに完了していないconsole.logため、値は未定義です。しばらくして終了し、変数を設定します。

console.logハンドラーをコールバックに移動すると、すべてが期待どおりに機能するはずです。

于 2013-01-17T22:47:17.493 に答える
1

匿名functionは非同期コールバックであるため、のに呼び出されますconsole.log。これを行う正しい方法は次のとおりです。

var jsonData;

$.getJSON("./js/ohno.JSON",function(data){
    jsonData = data;
    console.log(jsonData);
});
于 2013-01-17T22:48:49.990 に答える
1

getJSON関数は非同期であるため、成功コールバック関数は、要求が終了したときにのみ実行されます。console.dir()は、応答が発生する前に最初に実行されています。

console.dir()をgetJsonハンドラー関数内に配置します。

于 2013-01-17T22:50:32.493 に答える