2011-02-15 166 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); 
} 
相关问题