【问题标题】:javascript global var from ajax function来自ajax函数的javascript全局变量
【发布时间】:2012-02-06 13:56:30
【问题描述】:

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

【问题讨论】:

  • 你的ajax是异步的吗?你知道那是什么意思吗?

标签: javascript ajax django json


【解决方案1】:

似乎是异步问题。修改你的 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;    
}

【讨论】:

  • 我已经尝试过了,当全局变量 recent_id 在 get_home_timeline() 函数范围之外被访问时,它仍然是未定义的。
【解决方案2】:

这似乎是变量范围问题。变量 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 的作用域可以在函数内的任何位置访问。 如果不抱歉,希望这能解决您的问题。这是我的假设,范围可能会受到影响。

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多