来自ajax函数的javascript全局变量

时间:2012-01-10 04:12:05

标签: javascript ajax django json

我正在使用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的不好方法吗?

2 个答案:

答案 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的范围可以在函数内的任何位置访问。 希望这能解决你的问题,如果没有抱歉。这是我的假设,范围可能会受到影响。