我发送xhttprequest以从XML文件中检索一些元素。但是,它似乎返回大约8次:前6次不完整,另外2次返回XML中的所有项目。显然,我只想要一次并完成。
XML文件位于http://www.boardgamegeek.com/xmlapi/collection/Zuiderspel?own=1&version=1
该网站位于http://i298619.iris.fhict.nl/zuiderspel/spellen/ 正如您所看到的,游戏会多次显示(游戏' Alchemist'应该显示两次,但例如游戏' 99 Chances'在列表中多次返回)。
检查控制台,看看我的意思。
如何停止请求多次返回,以便每个游戏只显示一次?
我的代码:
<script type="text/javascript">
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (true) {
myFunction(xhttp);
}
};
xhttp.open("GET", "../wp-content/uploads/2015/12/Zuiderspel.xml", true);
xhttp.send();
}
function myFunction(xml) {
console.log(xml);
var x, i, xmlDoc, table, spellen, newDiv, newDivImg, stand, jaar, minspelers, maxspelers, speeltijd;
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xml.responseText, "application/xml");
x = xmlDoc.getElementsByTagName("item");
for (i = 0; i < x.length; i++) {
spellen = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
thumbs = x[i].getElementsByTagName("thumbnail")[0].childNodes[0].nodeValue;
stand = x[i].getElementsByTagName("comment")[0].childNodes[0].nodeValue;
jaar = x[i].getElementsByTagName("yearpublished")[0].childNodes[0].nodeValue;
newDiv = document.createElement("div");
newDiv.id = "div" + i;
newDiv.className = "spelClass";
newDiv.style.backgroundImage = "url(" + thumbs + ")";
newDiv.innerHTML = "<b>" + spellen + "</b><br />" + stand + "<br />" + jaar;
document.getElementById("spellen").appendChild(newDiv);
}
}
loadDoc();
</script>
<div id="spellen">
</div>
答案 0 :(得分:0)
readystatechange
事件并不能保证请求已完成。这只是意味着它改变了readyState
。
您需要做的是检查readyState
是4
(DONE),然后调用您的函数。请求完成后会触发其他事件,例如load
或loadend
。