두 번째로 (코드에서 시간순으로) 치는 것이 아닙니다. 그것은 아직 설정되지 않았기 때문입니다. 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);
당신이 정말로 다음, 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);
});
또한 대신 JQuery와 아약스 기능의 async: false
를 사용하여 동기 호출을 강제 할 수
편집.
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
async: false
});
하지만이 솔루션은 범위를이 특정 콜백 함수로만 제한합니다. 나는 전체 문서를 통해이 정보에 접근 할 필요가있다. 대신 다른 방법을 고려해야합니까? –
@ CarlosR.Batista 위의 업데이트를 참조하십시오. 강제 호출을 통해 동기식 호출이 가능하면 코드가 작동합니다. 동기 호출은 실제로 서버를 기다리는 동안 클라이언트 스크립트를 차단하므로 실제로 사용하지 않아야합니다. – McGarnagle
사실, 클라이언트가 이미 가져온 모든 데이터를 뒤집어서 동일한 페이지 (웹 앱)에서 약 30 분을 소비하는 동안이 json 파일을 한 번만 가져 오는 것입니다. 다른 옵션은 나에게 너무 효율적으로 보이지 않는이 파일에서 데이터 한 조각을 필요로 할 때마다 아약스 호출을하는 것입니다. Im은 비동기를 추측하는 것이이 경우에 올바른 호출이라고 생각하십니까? –