jQuery仅适用于浏览器's的第一次启动
jQuery works only with browser's first boot
我正在完成自由代码营的一项练习,该练习要求我与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的特点是异步部分。看看这个关于异步在Ajax中意味着什么的答案?。
在您的代码示例中,您要求JS在api调用完成之前显示users数组的值,因此它是空的。
在这个plunkerhttp://plnkr.co/edit/dKfuP9XDhidWMskmiop3?p=preview您可以看到,每次AJAX调用完成时,我都使用了一个事件绑定器来输出用户数组。
$( document ).ajaxComplete(function() {
console.log(allUsers);
});
通过这种方式输出,您可以在每次对api的调用返回时看到数组构建。
祝你好运!
相关文章:
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 删除确认对话框在第一次单击时不起作用
- Javascript:JSON请求仅在第一次工作
- Javascript onclick事件在第一次单击时未启动
- 为什么onchange事件没有在第一次更改时启动
- 在第一次安装扩展时,使用Javascript重新启动Google Chrome
- 启动日期选择器beforeShowDay只有在第一次点击后才能工作
- JS切换DIV's第一次点击时CSS未启动
- JavaScript 计时器在第一次按键时启动
- JS在第一次访问时重定向到启动页面
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 如果鼠标第一次没有离开文本框,则 Jquery 验证不会启动
- 自动完成未在第一次输入时启动
- 在初始页面加载时启动计时器.如果他们离开和返回,必须从第一次装载开始计数
- 在服务器第一次启动时创建一个JSON文件
- jQuery仅适用于浏览器's的第一次启动
- onclick事件不会在带有conditional语句的第一次单击时启动
- 函数第一次未启动
- Javascript OnChange未在第一次更改时启动
- 科尔多瓦/ Javascript localStorage.setItem仅在第一次启动时使用