嵌套的$ .getJSON()无法得到正确的答案?

时间:2016-07-12 10:43:03

标签: javascript jquery json api

我刚从freecode.camp学习Jquery,我正在编写一些代码来使用Twitchtv JSON API(https://www.freecodecamp.com/challenges/use-the-twitchtv-json-api)。

当我想在Twitch.tv上获得五个频道徽标时,但是当我编写代码时,我发现有四个相同的徽标,它从来就不是我想要的。

我在http://codepen.io/zhangolve/pen/JKOXwW?editors=1111有一个codepen,如果您愿意,请查看。

这是JS代码:

$("#click").on("click", function() {
    var channel = ['OgamingSC2', 'FreeCodeCamp', 'terakilobyte', 'storbeck', 'RobotCaleb'];
    for (var i = 0; i < channel.length; i++)  {
        var url = 'https://api.twitch.tv/kraken/streams/' + channel[i] + '?callback=?';
        var thechannelurl = 'https://api.twitch.tv/kraken/channels/' + channel[i] + '?callback=?';
        $.getJSON(url, function(data) {
            if (data.stream == null) {
                $.ajax({
                    dataType: "json",
                    url: thechannelurl,
                    //data: data,
                    type: "GET",
                    success: function(w) {
                        $("#content").append('<img src=' + w.logo + '> </img>')
                    }
                });
            } else {
                var logo = data.stream.channel.logo;
                //console.log(logo);
                $("#content").append('<img src=' + logo + '></img>');
            }
        })
    }
})

1 个答案:

答案 0 :(得分:0)

我把你的笔分开......

这是代码工作: http://codepen.io/rafaelcastrocouto/pen/rLYWXV

列表中的一个频道没有徽标...所以我使用了占位符图片。

var channelAPI = 'https://api.twitch.tv/kraken/';

var  channels=['OgamingSC2',
                'FreeCodeCamp',
                'terakilobyte',
                'storbeck',
                'RobotCaleb'];

var getJSONCallback = function (data, url) {
    if (data && data.logo) {console.log('1', data.logo)
      appendLogo(data.logo);
    } else if (data && 
              data.stream && 
              data.stream.channel && 
              data.stream.channel.logo) {console.log('3', data.stream.channel.logo)
      appendLogo(data.stream.channel.logo);
    } else if (url && url.channel) {console.log('2', url.channel.toString())
      $.getJSON(channelAPI+'channels/'+url.channel, getJSONCallback);
    } else {
      appendLogo('https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=No Logo Found&w=302&h=302');
    }
};

var appendLogo = function (logo) {
  $("#content").append('<img class="img" src="'+logo+'"></img>');
};

var clickFunction = function() {
  for(var i=0;i<channels.length;i++)  {
    var channel = channels[i];
    $.getJSON(channelAPI+'streams/'+channel, function (data) {
      getJSONCallback(data, {channel: this});
    }.bind(channel));
  }
};

$("#click").on("click", clickFunction);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="click" class="btn btn-primary" >click</button>
<div id="content"></div>