在全局变量中存储 getJSON 数据,但后来说它未定义

Posted

技术标签:

【中文标题】在全局变量中存储 getJSON 数据,但后来说它未定义【英文标题】:Stock getJSON data in a global var but later says its undefined 【发布时间】:2019-05-12 00:00:31 【问题描述】:

所以我想使用 $.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 = '';

为了使其全局化,但它做同样的事情,而不是未定义,我得到一个空白字符串。我也认为首先出现范围外日志的事实是问题的一部分。

我错过了什么吗?如果是这样,你能解释一下吗?还有其他方法吗?

谢谢

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

【问题讨论】:

欢迎来到异步处理的精彩世界。 需要注意的重要一点是它记录了Out of scopefirst。换句话说,它会在您设置之前记录该值。这种模式不起作用,并且链接问题的答案非常具有误导性。 谢谢马克,我会继续研究 【参考方案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
        

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

【讨论】:

以上是关于在全局变量中存储 getJSON 数据,但后来说它未定义的主要内容,如果未能解决你的问题,请参考以下文章

静态存储区与全局变量

变量与存储空间及其存储结构

在iphone的数据库中存储全局本地时间变量

将json加载到变量中

java全局变量清空?

无法从另一个函数(在全局范围内定义)访问变量(数组)