0

重複の可能性:
jQuery AJAX: 成功時の戻り値

クエリを介して JSON ファイルを取得しようとすると、この奇妙な参照の問題が発生します。

    var themeData;
    $.getJSON("json/sample.js", function(data) {
                themeData = data.theme;
                        console.log(themeData.sample[0].description);
            }); 
   console.log(themeData.sample[0].description);

最初の console.log は機能しますが、2 番目は機能しません。なぜこうなった?

4

2 に答える 2

5

ヒットしないのは(コード内で時系列で)2番目のものです。それは、まだ設定されていないからです。内部のコールバックgetJSONは、サーバーから戻った後に非同期で呼び出されます。

var themeData;

// FIRST -- themeData currently null
$.getJSON("json/sample.js", function(data) {

    // THIRD -- now themeData has a value, and gets logged
    themeData = data.theme;
    console.log(themeData.sample[0].description);
}); 

// SECOND -- themeData still null
console.log(themeData.sample[0].description);

メソッドを "after" で呼び出す必要がある場合はgetJSON、コールバックの考え方を取り入れてください。このようなものを使用してください。

var themeData;
function myCallback(data) {
    console.log(data.sample[0].description);
}
$.getJSON("json/sample.js", function(data) {
    themeData = data.theme;
    console.log(themeData.sample[0].description);
    myCallback(themeData);
}); 

編集

async: falseJQuery ajax 関数を使用する代わりに、同期呼び出しを強制することもできます。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback,
  async: false
});
于 2012-10-03T03:34:52.243 に答える
0

いいえ、$.getJSON非同期メソッドです。2 番目console.logが呼び出されると、themeDataその時点ではありません。

于 2012-10-03T03:35:45.003 に答える