在全局变量中存储 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 scope
first。换句话说,它会在您设置之前记录该值。这种模式不起作用,并且链接问题的答案非常具有误导性。
谢谢马克,我会继续研究
【参考方案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 数据,但后来说它未定义的主要内容,如果未能解决你的问题,请参考以下文章