为什么 Twitchtv API Stream 只显示每个频道的“离线”?

Why is Twitchtv API Stream only display “offline” for each channel?

这是一个 FreeCodeCamp 项目,我应该在其中显示频道是否直播。但是,在我创建的频道列表中,有些频道是直播的,有些频道不存在。尽管如此,无论如何,当我尝试在我的 codepen 中对其进行测试时,它仍然显示 "Offline",即使有些应该显示 "The Account doesn't exist" 或 "Online"。我还是想不通。我确实测试了 url 以确保它正常工作并且正常工作。这是一个示例:“https://api.twitch.tv/kraken/streams/OgamingSC2?client_id=egn4k1eja0yterrcuu411n5e329rd3”。

这是我的 JS 代码:

$(document).ready(function() {

  getSteams();

});

var channels = ["BasicallyIDoWrk", "FreeCodeCamp", "Golgothus", "maatukka", "Vinesauce", "brunofin", "comster404", "OgamingSC2"];

  var cb = "?client_id=egn4k1eja0yterrcuu411n5e329rd3";

function getSteams() {

  for (var channel in channels) {
    var indchannel = channel;

  $.ajax({
      url: "https://api.twitch.tv/kraken/streams/" + indchannel + cb,
      type: 'GET',
      dataType: "jsonp",
      data: {
        //action: 'query',
        format: 'json',
      },
    success: function(data) {

      var game;
      var status;

      if(data.stream === null) {
        game = "Offline";
        status = "offline";
      } else if (data.stream === undefined) {
        game = "The Account doesn't exist";
        status = "Account is closed";
      } else {
        game = data.stream.game;
        status = "online";
      };

       $("#channels").append('<div class="indbox"><a target="_blank" href="#">'+ game +'</a></div>');
    }

  });
  }
}

这是我的 codepen 的实际操作:https://codepen.io/kikibres/pen/EWooLK。我知道它还没有完成。一旦我确保 api 正确显示数据,我将完成剩下的工作。

$(document).ready(function() {
  
  getSteams();
  
});

var channels = ["BasicallyIDoWrk", "FreeCodeCamp", "Golgothus", "maatukka", "Vinesauce", "brunofin", "comster404", "OgamingSC2"];

  var cb = "?client_id=egn4k1eja0yterrcuu411n5e329rd3";

function getSteams() {
  
  for (var channel in channels) {
    var indchannel = channel;
  
  
  $.ajax({
      url: "https://api.twitch.tv/kraken/streams/" + indchannel + cb,
      type: 'GET',
      dataType: "jsonp",
      data: {
        //action: 'query',
        format: 'json',
      },
    success: function(data) {
    
      var game;
      var status;
      
      if(data.stream === null) {
        game = "Offline";
        status = "offline";
      } else if (data.stream === undefined) {
        game = "The Account doesn't exist";
        status = "Account is closed";
      } else {
        game = data.stream.game;
        status = "online";
      };
      
       $("#channels").append('<div class="indbox"><a target="_blank" href="#">'+ game +'</a></div>');
    }
  
  
  });
  }
}
html, body{
  height:100%;
  margin: 0;
  background-color: #ffffff;
}
.wrapper {
  text-align: center;
  position: relative;
  width: 100%;
  height: 100%;
  display:block;
}
.container {
  width: 75%;
  margin: 30px auto 0;
  position: relative;
}
.logobox img {
  width: 20%;
  margin: 0 auto;
}
.con-button {
  background-color: white;
 border: none;
 margin: 0.5em 0 0 0;
 padding: 0.5em 1em 0.5em 1em;
  text-align: center;
 color: rgb(100,65,164);
  font-size: 20px;
}
.activate {
  border-bottom: 1px solid #6441A4;
}
.divider hr {
  border-top: 1px solid #6441A4;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <div class="container">
    <div class="twitchtvarea">
      <div class="logobox">
        <img src="https://s6.postimg.org/bay7stotd/Twitch_Purple_RGB.png" />
      </div>
      <div class="twitchbox">
        <div class="controls">
          <button id="c-all" class="con-button" type="button">All</button>
    <button id="c-online" class="con-button" type="button">Online</button>
    <button id="c-offline" class="con-button" type="button">Offline</button> 
        </div>
        <div class="divider"><hr></div>
        <div id="channels">
        </div>
      </div>
    </div>
  </div>
</div>

部分问题是您的 for 循环。 Javascript for in 循环用于迭代对象中的键。在数组的情况下,key就是索引,意思如下...

for (var channel in channels) {

channel 设置为:

0
1
2
...

这将使您的 URL 看起来像:

https://api.twitch.tv/kraken/streams/0

我假设您想要的是 channels 数组中的频道名称,这样您的 URL 将如下所示:

https://api.twitch.tv/kraken/streams/SomeChannelName

您可以通过以下两种方式之一修复您的 for 循环。第一个是比较传统的for循环:

for (int i = 0; i > channels.length; i++) {
    var indchannel = channels[i];

    // perform your ajax calls here...
}

或者您可以使用 Array.forEach() 方法,它为数组中的每一项调用一个函数。

channels.forEach(function(indchannel, index, arr) {
    // perform your ajax calls here...
});