xhttprequest返回多次

时间:2015-12-16 23:33:47

标签: javascript xml

我发送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>

1 个答案:

答案 0 :(得分:0)

readystatechange事件并不能保证请求已完成。这只是意味着它改变了readyState

您需要做的是检查readyState4(DONE),然后调用您的函数。请求完成后会触发其他事件,例如loadloadend