有人能告诉我为什么每次代码循环都会得到不同的顺序吗? 我是JavaScript的新手,我知道代码不是很整洁。
<html>
<body>
<div id="status">
<br>
</div>
<script>
LoopThis()
function LoopThis(){
document.getElementById("status").innerHTML = "Status - Name: <br>"
var USERLIST = ["amd","danielfromsl","skyrimfus","tyler1","andymilonakis","OMGchad","Russ_Money","h3h3productions"]
var i, len;
for (i = 0, len = USERLIST.length; i < len; i++){
USERCHECK = USERLIST[i]
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
JSONDOC = this.responseText;
last = JSONDOC.split('"mature":')
last = last[1]
last = last.split(",")
isonline = last[0]
streamtitle = last[1].split('"status":')
streamtitle = streamtitle[1]
realuser = last[3].split('"display_name":')
realuser = realuser[1]
realuser = realuser.split('"')
realuser = realuser[1]
url = last[15].split('"url":')
url = url[1]
url = url.split('"')
url = url[1]
if (isonline == "true") {
//alert(realuser+" is streaming! Title:"+streamtitle)
document.getElementById("status").innerHTML += "<font color='0x00FF00'>Online</font> - "+"<a href='"+url+"'>"+realuser+"</a><br>"
} else {
//alert(realuser+" is offline!")
document.getElementById("status").innerHTML += "<font color='red'>Offline</font> - "+realuser+"<br>"
}
}
};
xhttp.open("GET", "https://api.twitch.tv/kraken/channels/"+USERCHECK+"?client_id=Sky", true);
xhttp.send();
}
}
setInterval(LoopThis,5000);
</script>
</body>
</html>
答案 0 :(得分:1)
使用for循环以预定义的顺序遍历用户列表。 但是在循环内部,您创建了一个异步XMLHttpRequest,并为它提供了一个函数,该函数将在您收到该请求的响应时运行。附加到xhttp.onreadystatechange事件的函数将在收到响应时运行。
每次运行脚本时都可以以不同的顺序接收响应,这就是为什么不同的xhttp.onreadystatechange事件将以不同的顺序触发的原因。