ヒットしないのは(コード内で時系列で)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: false
JQuery ajax 関数を使用する代わりに、同期呼び出しを強制することもできます。
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
async: false
});