2010-02-25 6 views
0

Je suis nouveau sur AJAX et XML. Je suis coincé sur une tâche d'école .. La tâche consiste à traiter un fichier XML composé de 2000 endroits différents avec le nom, le nom de la ville et le nom du comté. et faire un menu déroulant avec les différents comtés, mais seulement une fois.Menu de sélection XML vers dynamique (avec AJAX)

Le fichier XML ressemble à ceci:

<places> 
<place> 
    <Name>Vestby</Name> 
    <City>Vestby</City> 
    <County>Akershus</County> 
</place> 
... 
<place> 
    <Name>Eidsbugarden</Name> 
    <City>Vang</City> 
    <County>Oppland</County> 
</place> 
</places> 

Ma fonction ressemble à ceci:

function fillElementWithCounty(){ 
var selectElement = document.getElementById("selectMenu"); 
var allPlaces = countyXHRobject.responseXML.getElementsByTagName("place"); 
var prevCounty = ""; 

selectElement.options[0] = new Option("Choose county...", "chooseCounty", true, false); 
for (teller=1; teller < allPlaces.length; teller++){ 
    var county = allPlaces[teller].getElementsByTagName("county")[0].firstChild.nodeValue; 
    if (county ! = prevCounty) { 
    selectElement.options[teller] = new Option(county, county, false, false); 
    } 
    prevCounty = county; 
} 
} 

Cette fonction spectacle chaque comté une fois, mais il montre aussi tous les comtés « vierges ». Qu'est-ce que je fais de mal?

La fonction qui appelle fillElementWithCounty() ressemble à ceci:

function showPlaces(){ 
countyXHRobject = lagXHRobjekt(); 
if (countyXHRobject) { 
    countyXHRobject.onreadystatechange = function() { 
    if (countyXHRobject.readyState = = 4) { 
    fillElementWithCounty(); 
    } 
    } 
    countyXHRobject.open("GET", "viktigestader.xml"); 
    countyXHRobject.send(null); 
} 
} 

Répondre

-1

Je suis arrivé ce travail:

function fillElementWithCounty(){ 
    var selectElement = document.getElementById("selectMenu"); 
    var allPlaces = countyXHRobject.responseXML.getElementsByTagName("place"); 
    var x = countyXHRobject.responseXML; 
    var prevCounty = ""; 

    selectElement.options[0] = new Option("Select county...", "selectcounty", true, false); 
    j = 1; 
    for (i=1; i < allPlaces.length; i++){ 
     var county = allPlaces[i].getElementsByTagName("county")[0].firstChild.nodeValue; 
     if (county != prevCounty) { 
      selectElement.options[j] = new Option(county, county, false, false); 
      j++; 
     } 
     prevCounty = county; 
    } 
}