глобальная переменная javascript из функции ajax - PullRequest
0 голосов
/ 10 января 2012

Я использую dajaxice для извлечения атрибута json - который я хотел бы быть глобальным.Я не уверен, почему мой глобальный var всегда «неопределен»:

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?

Ответы [ 2 ]

0 голосов
/ 10 января 2012

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

0 голосов
/ 10 января 2012

Похоже на асинхронную проблему.Измените вашу функцию 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;    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...