문제

JSON 응답을 글로벌 변수에 저장하고 싶습니다. 그래서 GetJSON 요청을 두 번 이상 만들지 않고도 앱을 통해 사용할 수 있습니다.

var data;
$.getJSON("panorama.json",function(json){
data = json.images[0].src;
console.log(data);          
});


console.log(data);

실제 요청에 로그인하면 괜찮지 만 다른 곳에서 "정의되지 않은"을받습니다. 모든 의견이 appricated.

편집 [댓글에서 복사] : 시도 ...

$.myglobals = { result: "unset" } 

$(document).ready(function() { 

  $.getJSON( "panorama.json", function(json) { 
    $.myglobals.result = json.images[0].src; 
    console.log($.myglobals.result);     
  });

  console.log($.myglobals.result); 
}) ;

첫 번째 로그는 괜찮고 두 번째 로그는 정의되지 않았습니다.

편집 [답변에서 복사] :

실제로 두 방법이 모두 작동했습니다

흥미로운 점은 내 요청이 함수에 있었고 같은 함수의 요청 직후 내 글로벌 변수를 악용하려고했다는 것입니다.

함수 외부에 그것을 획득했을 때 그것은 매력처럼 작동했습니다.

도움이 되었습니까?

해결책

실제 코드가 그와 같이 구성되면 설정되지 않은 데이터에 액세스하는 데 문제가 있습니다. 아직. 당신이 있기 때문입니다 $.getJSON() 위에 있습니다 console.log() 데이터 값을 기록하기 전에 응답을받는 것은 아닙니다.

따라서 문제는 범위가 아니라 타이밍입니다. 서버 측 지연을 도입하면 솔루션이 충돌 할 수 있습니다.

응답을받은 경우 깃발을 설정해야 할 수도 있습니다.

var data, dataReceived = false;

$.getJSON("panorama.json",function(json){
  data = json.images[0].src;
  dataReceived = true;
  console.log(data);                    
});


// somwhere later
if (dataReceived) {
  console.log(data);
} else {
  // you could use setTimeout() or setInterval here to re-check
  console.log("data not received yet");
}

다른 팁

DOM (예 : #ID)의 속성에 삽입하여 필요에 따라 검색 할 수 있습니다.

다음은 변수를 하나의 $ (document) .ready ()로 설정하고 다른 $ (document) .ready ()로 사용할 수있는 접근법입니다. myglobals 글로벌 변수가 다른 사람과 충돌 할 가능성을 줄이는 네임 스페이스 객체입니다.

$.myglobals = {
  result: "unset" 
}

$(document).ready(function() {

  function pretend_JSON_call() {
    $.myglobals.result = {'a':"hello", 'b':"world" };
  }

  pretend_JSON_call();
});

$(document).ready(function() {
  alert($.myglobals.result['a']);
  alert($.myglobals.result['b']);
});

과도 링크 JSBIN의 위 코드에.

$ .getJson은 ajax 요청 (질문 범위의 키워드가 비동기식)을 해고합니다. 아직 정의되지 않았기 때문에 변수는 정의되지 않았으므로 응답이 완료되지 않았습니다. 다른 사람들은 콘솔을 옮기는 것을 제안했지만 코드에서 문구를 더 아래로 아래로 내립니다. 그러나 논리가 콜백 함수와 동기화되지 않으면 사용할 수 있다고 보장 할 수는 없습니다. $ .getJson은 콜백 함수를 매개 변수 중 하나로 받아들입니다.

$.getJSON( "myData.json", function( data ) {
    //Do whatever, this is a callback
    $.each( data, function(key, val) {
       //You can get even more specific like so
    });
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top