来自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全局变量的主要内容,如果未能解决你的问题,请参考以下文章