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