Запас данных getJSON в глобальном var, но позже говорит, что его неопределенный - PullRequest
0 голосов
/ 11 декабря 2018

Итак, я хочу получить данные, используя $ .getJSON, и сохранить их в переменной, чтобы использовать их позже.Даже если я объявил переменную 'subcount' перед $ .getJSON, я получаю ее как неопределенную, когда я действительно хочу что-то с ней сделать.Мой код выглядит так:

function loadSubs() {
        channel_url = "https://www.googleapis.com/youtube/v3/channels?part=statistics&id="+channelId+"&key="+key;

            var subcount;

            $.getJSON(channel_url, function(data) {
                subcount = data.items[0].statistics.subscriberCount;
                console.log("In scope: "+subcount);
            });

        console.log("Out of scope: "+subcount);
        do_something_with_data();
        }

Консоль дает мне

 Out of scope: undefined
 In scope: 1364189

Кажется, что когда она выходит из области действия getJSON, переменная возвращается в свое неопределенное состояние.Я попытался инициализировать его с помощью

subcount = '';

Чтобы сделать его глобальным, но он делает то же самое, вместо получения неопределенного, я получаю пустую строку.Я также думаю, что тот факт, что на первый план выходит журнал вне области видимости, является частью проблемы.

Я что-то упустил?Если так, можете ли вы объяснить?Есть ли другой способ сделать это?

Спасибо

РЕДАКТИРОВАТЬ: я объявил 'subcount' на основе этого ответа в другом потоке jQuery getJSON сохранить результат в переменную

1 Ответ

0 голосов
/ 11 декабря 2018

Исходя из этого потока: Можно ли установить async: false для вызова $ .getJSON

Я изменяю $ .getJSON на $ .ajax и ставлю async: false

function get_subcount(chan_url) {
            var subcount;
            $.ajax({
                url:chan_url,
                datatype:'json',
                async:false,
                success: function(data) {
                subcount = data.items[0].statistics.subscriberCount;
                }
            });
            return subcount
        }

Теперь я получаю один и тот же ответ в моих предыдущих «In scope» и «Out of scope»

...