我發送一個xhttprequest來從XML文件中檢索一些元素。但是,它似乎返回大約8次:前6次不完整,其他2次返回XML中的所有項。很明顯,我只想要一次就完成了。xhttprequest返回多次
的XML文件在http://www.boardgamegeek.com/xmlapi/collection/Zuiderspel?own=1&version=1
發現該網站在http://i298619.iris.fhict.nl/zuiderspel/spellen/ 發現正如你可以看到,遊戲顯示多次(遊戲「煉金術士」應顯示兩次,因爲它是,但例如遊戲'99機會'在列表中被返回幾次)。
檢查控制檯以查看我的意思。
我怎麼能阻止多次返回的請求,所以每個遊戲都只顯示一次?
我的代碼:
<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>
我認爲這可能與第一個if語句有關,只是'if(true)'。 這應該是'如果(xhttp.readyState == 4 && xhttp.status == 200)'但這給了我意想不到的標記非法 – user3287470
'這給了我意外的標記非法'....你想寫出了整個錯誤,因爲這看起來只是我錯誤信息的一部分...是的,你需要檢查'readyState'和'status' ...或使用'.onload'來代替 –
這就是確切的錯誤,僅此而已。但是,單獨添加就緒狀態和狀態(所以在兩個不同的if語句之後)會修復它。看起來像WordPress不喜歡和符。 雖然這會導致一個新問題:XML包含約145個文件,但僅返回約20個文件。似乎onreadystatechange不能正常工作 – user3287470