我正在使用dajaxice来检索json属性 - 我希望它是全局的。我不确定为什么我的全局变量总是“未定义”:
var recent_id;
$(function(){
recent_id = Dajaxice.ticker.get_home_timeline(get_home_timeline_callback);
alert(recent_id);
});
function get_home_timeline_callback(data){
if(data==Dajaxice.EXCEPTION){
alert('Error! Something happens!');
}else{
var parsed = JSON.parse(data.home_timeline);
var parsed_id = {'parsed_id':parsed[0].id_str};
console.log(parsed_id);
}
return parsed_id;
}
@dajaxice_register
def get_home_timeline(request):
home_timeline = oauth_req(
'http://api.twitter.com/1/statuses/home_timeline.json?count=1',
settings.TWITTER_TOKEN_KEY,
settings.TWITTER_TOKEN_SECRET
)
return simplejson.dumps({'home_timeline': home_timeline })
这是访问另一个ajax函数中使用的var的不好方法吗?
答案 0 :(得分:0)
似乎像异步问题。修改你的get_home_timeline_callback函数,如下所示
function get_home_timeline_callback(data){
if(data==Dajaxice.EXCEPTION){
alert('Error! Something happens!');
}else{
var parsed = JSON.parse(data.home_timeline);
var parsed_id = {'parsed_id':parsed[0].id_str};
console.log(parsed_id);
}
//debug
alert(parsed_id);
//since the value has come, now assign it to the global variable
recent_id = parsed_id;
}
答案 1 :(得分:0)
似乎是变量范围问题。变量parsed_id的范围在{}内的else语句中声明,因此其范围在else语句中。当你在括号外面返回parsed_id时,它可能会给出undefined。
浏览变量范围explanation here
更改您的功能,如下所示。
function get_home_timeline_callback(data)
{
var parsed_id = "";
if(data==Dajaxice.EXCEPTION)
{
alert('Error! Something happens!');
}
else
{
var parsed = JSON.parse(data.home_timeline);
parsed_id = {'parsed_id':parsed[0].id_str};
console.log(parsed_id);
}
return parsed_id;
}
现在,变量parsed_id的范围可以在函数内的任何位置访问。 希望这能解决你的问题,如果没有抱歉。这是我的假设,范围可能会受到影响。