Я использую dajaxice для извлечения атрибута json - что я хотел бы быть глобальным. Я не уверен, почему мой глобальный var всегда "undefined":
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 })
Это плохой способ доступа к var, который будет использоваться в другой функции ajax?
Похоже на асинхронную проблему. Измените функцию 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;
}
Это похоже на проблему с переменной областью. Область действия переменной parsed_id объявляется внутри оператора else внутри {}, поэтому ее область действия находится в выражении else. И когда вы возвращаете parsed_id вне скобок, он может давать неопределенные значения.
Ознакомьтесь с объяснением объема переменных здесь.
Измените свою функцию, как показано ниже.
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 может быть доступна в любом месте внутри функции. Надеюсь, это решает вашу проблему, если не жаль. Это было мое предположение, что область действия может быть затронута.