Avatar billede farving Nybegynder
13. november 2006 - 19:40 Der er 3 kommentarer og
1 løsning

XML i Javascript

Hej Eksperter

Jeg har fået bragt mig i en lidt halv skidt situation da jeg i Programmering C (et htx valgfag), har valgt at udfordre min kunnen og valgt at lave vores projekt som består i at lave noget udregning af energi og sådan...

Udregning og sådan er egentlig let nok, og kan også godt finde ud af det meste, mit problem ligger i at jeg vil lave en database i xml hvor et produkt kunne være defineret som sådan
<ware categori="liquid" producer="pepsi" energi="200">Cola</ware>

Ved ikke om dette er korrekt gjort, men mit problem kommer så i at få oprettet forbindelse til den XML fil (har prøvet 3-4 tutorials som alle har mislykket), og få lagt dataene ind i et array eller på en måde så jeg kan få dem brugt...

Jeg regner med at have nogle multiple selects med onchange på som fylder næste select op i rækken med muligheder, indtil man når den sidste, derfor skal man kunne tjekke om varen er i categorien liquid eller snack...

Hvis nogen forstår alt dette kan i så hjælpe mig lidt igang evt give mig noget tutorial som viser noget bare lignende det her?

Mvh Carsten
Avatar billede farving Nybegynder
14. november 2006 - 19:12 #1
Tror måske jeg har fundet løsningen, må bare lige teste om det virker...

Mvh Carsten
Avatar billede farving Nybegynder
14. november 2006 - 19:45 #2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title>Dokument title</title>
<script language="Javascript">
var IE = (navigator.appName == "Microsoft Internet Explorer") ? true : false;
var xmlHttp = null;
var arrXML = new Array();
function getXML(url) {
    // for Mozilla and FireFox
    if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    // for IE
    } else if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (xmlHttp != null) {
        xmlHttp.onreadystatechange = onResponse;
        xmlHttp.open("GET", url, true);
        xmlHttp.send(null);
    } else {
        alert("Your browser does not support XMLHTTP.");
    }
}
function checkReadyState(obj) {
    if (obj.readyState == 4) {
        if(obj.status == 200) {
            return true;
        } else {
            alert("Error occured during retrieving XML data");
            return false;
        }
    }
}
function onResponse() {
    if (checkReadyState(xmlHttp)) {
        var response = xmlHttp.responseXML.documentElement;
        x.response.getElementByTagName("ware");
        for (a=0;a<x.length;a++) {
            arrXML[a][0] = x[a].getElementByTagName("categori")[0].firstChild.data;
            arrXML[a][1] = x[a].getElementByTagName("producer")[0].firstChild.data;
            arrXML[a][2] = x[a].getElementByTagName("name")[0].firstChild.data;
            arrXML[a][3] = x[a].getElementByTagName("energi")[0].firstChild.data;
        }
    }
}
function PreLoadScript() {
    var oList = document.getElementById("Main");
    var arrUnduplicated = new Array();
    for (a in arrXML) {
        arrUnduplicated[a] = unduped[arrXML[a][0]];
    }
    for (a in arrUnduplicated) {
        var newoOpt = document.createElement("option");
        newoOpt.text = arrUnduplicated[a];
        newoOpt.value = arrUnduplicated[a];
        if (IE) {oList.options.add(newoOpt);}
        else {oList.options.add(newoOpt, null);}
    }
}
function SetDataToSelect(selVal, id) {
var oList = document.getElementById("Sub" + id);
var arrUnduplicated = new Array();
    //sletter indholdet af de næste selects
    if (document.getElementById("Sub" + id).options.length) {
        for (a=id;a<5;a++) {
            var tmpoList = document.getElementById("Sub" + a);
            if (!tmpoList.options.length) {continue;}
            while (tmpoList.options.length) {
                tmpoList.options.remove(0);
            }
        }
    }   
    for (a in arrXML) {
        if (arrXML[a][id] == selVal) {
            arrUnduplicated[a] = unduped[arrXML[a][id]];
        }
    }
    for (a in arrUnduplicated) {
            var newoOpt = document.createElement("option");
            newoOpt.text = arrUnduplicated[a];
            newoOpt.value = arrUnduplicated[a];
            if (IE) {oList.options.add(newoOpt);}
            else {oList.options.add(newoOpt, null);}
        }
    }
}

</script>
</head>

<body onload="getXML('food.xml'); PreLoadScript();">
<form>
<select
    multiple="true"
    onchange="SetDataToSelect(this.options[this.selectedIndex].value, '1');"
    id="Main"
></select>
<select
    multiple="true"
    onchange="SetDataToSelect(this.options[this.selectedIndex].value, '2');"
    id="Sub1"
></select>
<!--<select
    multiple="true"
    onchange="addToCart(this.options[this.selectedIndex].value);"
    id="Sub2"
></select>-->
</form>
</body>
</html>

får fejl i følgende:
linie 1, getXML er ikke defineret
linie 88, syntax error manglende }

Kan ikke gennemskue nogle af fejlene men har sikkert noget med glemsomhed at gøre, eller min XML forbindelse, er der nogen der lige vil tjekke om det jeg har gjort er korrekt indenfor XML og evt resten også?

Mvh Carsten
Avatar billede farving Nybegynder
15. november 2006 - 00:17 #3
lader til at min xml del virker...

Tror måske det er "unduped[]" som ikke virker...

Hvordan undgår man dupliketter ved udtræk fra et Array?

Mvh Carsten
Avatar billede farving Nybegynder
17. november 2006 - 19:51 #4
Lader ikke til at folk kan/vil hjælpe så lukker bare denne her

Mvh Carsten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB