глобальная переменная javascript из функции ajax

-3

Я использую 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?

  • 0
    Ваш AJAX асинхронный? Знаете ли вы, что это значит?

2 ответа

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;    
}
  • 0
    Я уже попробовал это, и когда глобальный var недавний_идентификатор доступен из области действия функции get_home_timeline (), он все еще не определен.
0

Это похоже на проблему с переменной областью. Область действия переменной 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 может быть доступна в любом месте внутри функции. Надеюсь, это решает вашу проблему, если не жаль. Это было мое предположение, что область действия может быть затронута.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню