将getJSON数据存储在全局变量中,但稍后会说其未定义

时间:2018-12-11 02:46:59

标签: javascript jquery scope undefined getjson

所以我想使用$ .getJSON获取数据并将其存储在变量中以供以后使用。即使我在$ .getJSON之前声明了变量'subcount',当我实际上想对它进行处理时,我还是将其作为未定义的。我的代码如下:

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 = '';

为了使其具有全局性,但它执行相同的操作,而不是得到未定义,而是得到一个空白字符串。我还认为,范围外日志优先出现的事实是问题的一部分。

我想念什么吗?如果可以,您能解释一下吗?还有另一种方法吗?

谢谢

编辑:我根据此答案在另一个线程上声明了“子计数” jQuery getJSON save result into variable

1 个答案:

答案 0 :(得分:1)

基于此线程:Is it possible to set async:false to $.getJSON call

我将$ .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
        }

现在我在以前的“范围内”和“范围外”得到相同的答案

相关问题