我希望有人可以帮助解决一个简单的问题 - 但我已经准备好再次抨击我的头了。
我有一个函数可以对API进行JSON调用,然后将结果推送到数组中。该函数似乎工作正常,因为我的console.log显示数组已正确填充。
我正在努力学习如何访问修改后的twichResult对象的值(在函数运行之后),这样我就能用它做“东西”。例如在屏幕上显示'status'属性的值等...我举一些例子来说明我在大注释部分中尝试过的内容。
我真的很感激有些智慧因为我耗尽了我的资源。提前谢谢。
<script type="text/javascript">
$(document).ready(function() {
var twitchResult = {results:[]};
var channel = { logo:"", display_name:"", status:"", url:"" };
var finalUrl = "https://api.twitch.tv/kraken/streams/freecodecamp?callback=?"
getTwitchers (finalUrl, "freecodecamp");
console.log(twitchResult);
// How do I access the individual values in the object TwitchResult?
// I get "undefined" in the console if I try to access the object's property values
// I've tried every way I can think of to get 'into' the returned object :
// console.log(twitchResult.results);
// console.log(twitchResult["results"])
// console.log(twitchResult.results.status)
// console.log(twitchResult[0])
// console.log(twitchResult[0][0])
// etc etc
function getTwitchers (url, item) {
$.getJSON(url, function(data) {
var obj = data.stream;
// Check if the object is not valid using (obj == null) which is shorthand for both null and undefined
if (obj == null) {
if (obj === undefined) {
channel.display_name = item;
channel.status = "closed";
console.log ("this is undefined");
}
else {
channel.display_name = item;
channel.status = "offline";
console.log("this is null");
}
}
else {
channel.logo = obj.channel.logo;
channel.display_name = obj.channel.display_name;
channel.status = obj.channel.status;
channel.url = obj.channel.url;
console.log("valid entry");
}
twitchResult["results"].push(channel);
// twitchResult.results.push(channel);
// console.log(twitchResult);
});
}
});
</script>
答案 0 :(得分:0)
$ .getJSON正在发出ajax请求。您必须在请求处理程序中处理此请求。当getTwichers返回时,twichResults尚未设置。
有一些方法可以延迟程序执行,直到twichResults完成,但你不应该考虑使用它们,因为它们会延迟程序执行。 ajax的想法是异步执行事物,而不会干扰执行流程的其余部分。如果您要执行的代码取决于json,那么您应该将它添加到$ .getJSON中的句柄。只需编写一个新函数(例如continue_execution(twichResult))并在twitchResult [“results”]之后立即调用它.push(channel);.请勿在getTwitchers(...)之后做任何事情。
顺便说一句:在使用函数之前定义函数是一个好习惯,因为它遵循人眼读取代码的流程,并且有编程语言,这依赖于这种声明函数的风格。
如果您不清楚这一点,请添加评论。