gpt4 book ai didi

javascript - getJSON 变量返回未定义

转载 作者:行者123 更新时间:2023-12-03 06:28:40 28 4
gpt4 key购买 nike

我不知道为什么 getJSON 中的“streamName[i]”返回“未定义”。它里面的所有内容都返回正确的值,但只有streamName返回未定义的值

var streamName = ['LCK1', 'ryan_clark', 'syndicate', 'riotgames', 'esl_csgo', 'Nightblue3', 'summit1g', 'imaqtpie', 'sodapoppin', 'captainsparklez'];
var nullLogo = "https://dummyimage.com/50x50/ecf0e7/5c5457.jpg&text=0x3F";
var name;

for (var i = 0; i < streamName.length; i++) {
var url = 'https://api.twitch.tv/kraken/streams/' + streamName[i] + '?callback=?';

$.getJSON(url, function(data) {
console.log(name);

if (data.stream == null) {
$('.streamersList').append('<div> <div class="logo"> <img src=' + nullLogo + '></div> <div class="nameStreamer">' + streamName[i] + '</div> <div class="state"> Offline </div></div>');
} else {
$('.streamersList').append('<div> <div class="logo"> <img src=' + data.stream.channel.logo + '></div> <div class="nameStreamer">' + streamName[i] + '</div> <div class="state">' + data.stream.channel.game + ' </div></div>');
}

});
}

最佳答案

因为 $.getJSON 是一个异步函数,所以当回调运行时,i 将完成循环。由于当 i 大于或等于 streamName 的长度时循环中断,因此 i 将尝试访问 中的元素StreamName 超出了数组末尾,即 未定义

在本例中,回调的每个实例中 i 为 10 的原因是 JavaScript 中作用域的工作方式。据代码所知,istreamNamenullLogoname< 一起在函数顶部声明。/。迭代循环时,i 的值发生更改,并且该更改在函数内部的任何位置都可见,包括尚未运行的回调内部。当它们运行时,i 将是 10,因为它到达了循环末尾,这就是回调将使用的值。

确保在 $.getJSON 函数中获得正确的 i 值的一种方法是将 i 作为参数传递到立即调用的函数。这将有效地将i当前值绑定(bind)到参数index,因此使用index来获取元素根据循环的迭代,数组的值将具有正确的值。

for (var i = 0; i < streamName.length; i++) {
// note how i can be used here because this is synchronous, aka happening right now
var url = 'https://api.twitch.tv/kraken/streams/' + streamName[i] + '?callback=?';

(function(index) {
$.getJSON(url, function(data) {
// this is asynchronous (happens in the future), so i will have a different
// value by the time it is called, but index will have the correct value
console.log(name);
if (data.stream == null) {
$('.streamersList').append('<div> <div class="logo"> <img src='
+ nullLogo
+ '></div> <div class="nameStreamer">'
+ streamName[index]
+ '</div> <div class="state"> Offline </div></div>');
} else {
$('.streamersList').append('<div> <div class="logo"> <img src='
+ data.stream.channel.logo
+ '></div> <div class="nameStreamer">'
+ streamName[index]
+ '</div> <div class="state">'
+ data.stream.channel.game
+ ' </div></div>');
}
});
})(i);
}

关于javascript - getJSON 变量返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529559/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com