2011-02-15 7 views
0

왜 이것이 ajax 호출에서 반환 된 데이터로 설정되는 대신 null로 나타 납니까? 그것은 내가 간과하고있는 단순한 무언가 일 것임에 틀림 없다.이 글로벌 변수가 변경되지 않는 이유는 무엇입니까?

var message; 

$(document).ready(function(){ 
    fbFetchMessage(); 
    alert(message); 
}); 

function fbFetchMessage(){ 
    var url = "http://graph.facebook.com/companyname/feed?callback=?"; 
     $.getJSON(url,function(json){ 
      message = json.data[0].message; 
     }); 
} 
+0

을 할 수 있습니다 당신은 기다려야한다. 'jetJSON'의 콜백 함수에 경고를 두거나 타이머 안에 넣으십시오. –

+0

타이머에 경고를 두는 것은 기다리는 버그입니다 – mkoryak

답변

7

메시지 가 변경되는하지만, 후에는

이 코드를 시도하고 youself에 대한 참조 경고 전화 :

var message; 

$(document).ready(function(){ 
    fbFetchMessage(); 
    alert(message); 
}); 

function fbFetchMessage(){ 
    var url = "http://graph.facebook.com/companyname/feed?callback=?"; 
     $.getJSON(url,function(json){ 
      message = json.data[0].message; 
      alert("really it gets changed:"+message); 
     }); 
} 
+0

대단히 고마워요! – user398314

4

$.getJSON을의 다른 .ajax() (실제로, AJAX와 같은 일반) 비동기 적으로 (기본값)으로 실행됩니다.

즉, message보다 먼저에 성공 처리기가 실제로 정의 할 수 있음을 의미합니다. AJAX 호출이 완료 될 때까지 (당신이 1.5.0+를 사용하는 경우)

이를 해결하기 위해, 당신은 jQuerys에게 Deferredhelp 객체를 사용하는

$(document).ready(function(){ 
    fbFetchMessage().done(function(json) { 
     alert(json.data[0].message); // data will also be the result which was returned 
    }); 
}); 

function fbFetchMessage(){ 
    var url = "http://graph.facebook.com/companyname/feed?callback=?"; 
    return $.getJSON(url); 
} 
관련 문제