来自ajax函数的javascript全局变量

Posted

技术标签:

【中文标题】来自ajax函数的javascript全局变量【英文标题】:javascript global var from ajax function 【发布时间】: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是异步的吗?你知道那是什么意思吗? 【参考方案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 的作用域可以在函数内的任何位置访问。 如果不抱歉,希望这能解决您的问题。这是我的假设,范围可能会受到影响。

【讨论】:

以上是关于来自ajax函数的javascript全局变量的主要内容,如果未能解决你的问题,请参考以下文章

将全局变量传递给ajax函数,发布到php,保存到数据库

如何全局访问 AJAX 定义的变量? [复制]

Python:来自函数内部的全局变量 + 诅咒

js设置全局变量ajax中赋值

在 JavaScript 中为全局变量列表赋值

全局变量更新 AJAX POST