为什么这个全局变量没有改变?

为什么这会变为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; }); } 

消息正在更改,但您调用警报后

试试这段代码,亲眼看看:

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

$.getJSON与任何其他.ajax() (实际上,通常是AJAX)一样,是异步运行的(默认情况下)。

这意味着,您尝试成功处理程序实际定义之前提醒message

要解决这个问题,您可能需要使用jQuerys Deferred 帮助对象(如果您使用的是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); }