为什么这个全局变量没有被改变?
问题描述:
为什么会变成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;
});
}
答
消息被正在改变,但后,您呼叫警报
试试这个代码,看看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);
});
}
答
$.getJSON
像任何其他.ajax()
(实际上,阿贾克斯一般)运行asyncronously(默认情况下)。
这意味着,您尝试提醒message
之前您的成功处理程序可以实际定义它。
为了解决这个问题,你可能需要使用jQuerys Deferred
help对象(如果你使用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);
}
你必须等待,直到AJAX调用完成。只需将警报放在`jetJSON`的回调函数中,或者将它放在定时器中。 – 2011-02-15 15:17:17
将警报放入计时器是一个等待发生的错误 – mkoryak 2011-02-15 15:19:07