2011-02-15 163 views
0

爲什麼會變成null而不是設置爲從ajax調用返回的數據?這一定是我忽略的簡單東西。爲什麼這個全局變量沒有被改變?

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

你必須等待,直到AJAX調用完成。只需將警報放在`jetJSON`的回調函數中,或者將它放在定時器中。 – 2011-02-15 15:17:17

+0

將警報放入計時器是一個等待發生的錯誤 – mkoryak 2011-02-15 15:19:07

回答

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); 
     }); 
} 
4

$.getJSON像任何其他.ajax()(實際上,阿賈克斯一般)運行asyncronously(默認情況下)。

這意味着,您嘗試提醒message之前您的成功處理程序可以實際定義它。

爲了解決這個問題,你可能需要使用jQuerys Deferredhelp對象(如果你使用1.5.0+)

$(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); 
} 
相關問題