javascript - jQuery 仅适用于浏览器首次启动

标签 javascript jquery

我正在完成免费代码训练营的一项练习,该练习要求我与 TwitchTV API 进行交互。

我正在使用一个 jQuery 文件,我将其包含在 HTML 文件中结束正文标记之前 - 请参阅下面的代码。

我正在使用代码的最后一行来检查我是否正在获取数据。

当我第一次启动浏览器时,代码工作正常。但是,如果我刷新(在更改后检查我的工作),控制台的输出将是一个空数组,这不是我所期望的。

有人可以帮我弄清楚为什么会出现这种行为吗?另外,我该如何解决它?

$(document).ready(function() {
  // on document ready
  var baseEndpoint = "https://api.twitch.tv/kraken/streams/"
  var users = ["medrybw", "freecodecamp", "storbeck", "terakilobyte", "habathcx","RobotCaleb","comster404","brunofin","thomasballinger","noobs2ninjas","beohoff"]
  var JSONP = "?callback=?"

  // all users
  var allUsers = [];

  // for each user
  users.forEach(function(currUser) {
    // make a request to the API
    $.getJSON(baseEndpoint + currUser + JSONP, function(data) {
      // gather and format information for user
      var user = {};

      // userName
      user["userName"] = currUser;

      // streamStatus
      if (data["stream"] === null) {
        user["streamStatus"] = "user-off";
      }
      else {
        user["streamStatus"] = "user-on";
      }

      // img
      if (user["streamStatus"] === "user-on") {
        user["img"] = data["stream"]["channel"]["logo"];
      }
      else {
        user["img"] = "http://static-cdn.jtvnw.net/jtv-static/404_preview-300x300.png";
      }

      allUsers.push(user);
    });
  });

  $(document).ajaxComplete(function() {
    console.log(allUsers);
  });
});

最佳答案

AJAX 的特点是异步部分。看看这个答案 What does Asynchronous means in Ajax? .

在您的代码示例中,您要求 JS 在 api 调用完成之前显示 users 数组的值,因此它是空的。

在这个笨蛋中http://plnkr.co/edit/dKfuP9XDhidWMskmiop3?p=preview您可以看到,每次 AJAX 调用完成时,我都使用事件绑定(bind)器来输出用户数组。

$( document ).ajaxComplete(function() {
 console.log(allUsers);
}); 

通过这种方式输出,您可以在返回每次对 api 的调用时看到数组构建。

祝你好运!

关于javascript - jQuery 仅适用于浏览器首次启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095829/

相关文章:

javascript - 谷歌脚本 - 整个表格删除

javascript regexp 帮助选择一个单词但没有第一个字符

javascript - 在一定时间内自动减小图像尺寸

javascript - 使用可编辑的 div 高度更改来添加和删除其他 DOM 元素的类

javascript - Rails 4 JS TypeError : $(. ..).previous 不是函数

javascript - 尝试渲染 js.erb 部分模板时出现问题

javascript - 如何从 Angular 服务内部调用该服务内部的函数?

jquery - 随着 jQuery DOM 操作(添加/删除/等)的内容更改,页面页脚在 View 中上下跳动

javascript - 更新指令的范围并使用另一个指令进行观察

javascript - 函数内的 JS 函数不会被调用