javascript ajax xml, första värdet blir undefined

Permalänk

javascript ajax xml, första värdet blir undefined

Jag har skapat en meny där valet bestämmer vilken xml-fil som ska läsas in.
Rätt xml-fil läses in men första värdet blir undefined.
Varför och hur gör man för att undvika att det sker.

<main> <form class="headform"> <select id="landscapeMenu"> <option>Välj län</option> <option value="blekinge">Blekinge</option> <option value="dalarna">Dalarna</option> <option value="gotland">Gotland</option> <option value="gavleborg">Gävleborg</option> <option value="halland">Halland</option> <option value="jamtland">Jämtland</option> <option value="jonkoping">Jönköping</option> <option value="kalmar">Kalmar</option> <option value="kronoberg">Kronoberg</option> <option value="norrbotten">Norrbotten</option> <option value="skane">Skåne</option> <option value="stockholm">Stockholm</option> <option value="sodermanland">Södermanland</option> <option value="uppsala">Uppsala</option> <option value="varmland">Värmland</option> <option value="vasterbotten">Västerbotten</option> <option value="vasternorrland">Västernorrland</option> <optino value="vastermanland">Västermanland</option> <option value="vastragotaland">Västra götaland</option> <option value="orebro">Örebro</option> <option value="ostergotland">Östergötland</option> </select> <div id="cityresult"></div> </main>

var landscapeMenuElem; var cityResultElem; function init() { landscapeMenuElem = document.getElementById("landscapeMenu"); cityResultElem = document.getElementById("cityresult"); addListener(landscapeMenuElem, "change", selectLandscape); } addListener(window,"load",init); function selectLandscape() { var landscape; landscape = this.value; requestLandscapeData(landscape); } function requestLandscapeData(landscape) { var request; if(XMLHttpRequest) { request = new XMLHttpRequest(); } else if (ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP"); } else { alert("Tyvärr inget stöd för AJAX, så data kan inte läsas in"); return false; } request.open("GET", "xml/town/" + landscape + ".xml", true); request.send(null); request.onreadystatechange = function() { if(request.readyState == 4 || request.readyState == "complete") if(request.status == 200) getDataLandscape(request.responseXML); else landscapeElem.innerHTML = "Den begärda resursen finns inte"; }; } function getDataLandscape(XMLcode) { var cityElems; var nameElem; var i; var HTMLcode; cityElems = XMLcode.getElementsByTagName("city"); for (i=0; i<cityElems.length; i++) { type = cityElems[i].getAttribute("type"); nameElem = cityElems[i].getElementsByTagName("name")[0]; HTMLcode += nameElem.firstChild.data + "<br>"; } cityResultElem.innerHTML = HTMLcode; }

Permalänk
Medlem

Om det första värdet i från din XML returnerar undefined så har du inte gett nog med kod för att få hjälp med problemet. Eftersom koden inte är komplett är det svårt att testa.

Permalänk
Medlem
Skrivet av Snillet71:

function getDataLandscape(XMLcode) { var cityElems; var nameElem; var i; var HTMLcode; cityElems = XMLcode.getElementsByTagName("city"); for (i=0; i<cityElems.length; i++) { type = cityElems[i].getAttribute("type"); nameElem = cityElems[i].getElementsByTagName("name")[0]; HTMLcode += nameElem.firstChild.data + "<br>"; } cityResultElem.innerHTML = HTMLcode; }

HTMLcode används utan att initieras till ett värde. Sätt det till tom sträng tex.

Skickades från m.sweclockers.com

Permalänk

@toj_ts: Tack så jättemycket nu fungerar det.

Permalänk
99:e percentilen

@Snillet71, använd aldrig == i JavaScript. Använd istället ===. Läs mer här om du vill veta vad skillnaden är.

Ett annat tips jag kan ge är att följande kod är väldigt svårläst:

if(request.readyState == 4 || request.readyState == "complete") if(request.status == 200) getDataLandscape(request.responseXML); else landscapeElem.innerHTML = "Den begärda resursen finns inte";

Fixa gärna indenteringen där och lägg till klammerparenteser, även om de är redundanta.

Visa signatur

Skrivet med hjälp av Better SweClockers