Osaisko joku kokeneempi sanoa, miksi tämä toimii FF:llä mutta IE:lla tulee tossa alert-kohdassa "0". Ilmeisesti IE ei osaa tämän koodin avulla lukea XML-dataa, vai mistä moinen johtunee?
<html> <head> <title>Ajax - esimerkki</title> <link href="style.css" type="text/css" rel="stylesheet"/> <script type="text/javascript" language="JavaScript"> var httpRequest; function createXMLHttpRequest() { if(window.ActiveXObject){ httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); //alert('ie'); }else if(window.XMLHttpRequest) { httpRequest = new XMLHttpRequest(); //alert('ff'); } } function aja(){ createXMLHttpRequest(); httpRequest.onreadystatechange = checkState; httpRequest.open("GET","lista.xml",true); httpRequest.send(null); } function checkState() { if(httpRequest.readyState == 4){ displayXMLData(httpRequest.responseXML); }else{ //window.alert("Error: " + httpRequest.status); } } function displayXMLData(xmlDoc) { var kunta = document.getElementById("kurssi").value; alert(kunta); var x = xmlDoc.getElementsByTagName(kunta).length; alert(x); } </script> </head> <body> <form> <select id="kurssi" onchange="aja()"> <option value="">Valitse kurssi</option> <option value="matikka">Matematiikka</option> <option value="ohjelmointi">Ohjelmointi</option> <option value="kieli">Kieli</option> </select> </form> </body> </html>
Kummassa alertissa toi 0 tulee ja miltä näyttää xml-dokumentti?
0 tulee kohdassa
alert(x);
alert(kunta); palauttaa taas onnistuneesti listalta valitun aineen.
xml-tiedosto on seuraavanlainen:
<?xml version="1.0" encoding="ISO-8859-1"?> <dokumentti> <matikka> <kurssin_nimi>Peruskurssi</kurssin_nimi> <tunnus>M001</tunnus> <opettaja>MV</opettaja> <toteutus>1. vuosi</toteutus> </matikka> <ohjelmointi> <kurssin_nimi>Javan perusteet</kurssin_nimi> <tunnus>O001</tunnus> <opettaja>KA</opettaja> <toteutus>1. vuosi</toteutus> </ohjelmointi> <ohjelmointi> <kurssin_nimi>Olio-ohjelmoinnin perusteet</kurssin_nimi> <tunnus>O002</tunnus> <opettaja>KA</opettaja> <toteutus>2. vuosi</toteutus> </ohjelmointi> <ohjelmointi> <kurssin_nimi>Internet-ohjelmointi</kurssin_nimi> <tunnus>O003</tunnus> <opettaja>MW</opettaja> <toteutus>2. vuosi</toteutus> </ohjelmointi> <kieli> <kurssin_nimi>Suomi 1</kurssin_nimi> <tunnus>K001</tunnus> <opettaja>MN</opettaja> <toteutus>1. vuosi</toteutus> </kieli> </dokumentti>
Oletko kokeillut tulostaa tuota xmlDoc-stringiä, että tuleeko se yleensäkään perille IE:llä? Jos tulee, sittenhän vika on sen jälkeisessä koodissa. Ihan ohimennen, tuo xml-dokkari on hieman erikoisesti jäsennelty. Tuntuisi jotenkin loogisemmalta että tuo muuttuva asia kursseissa (aine) olisi kurssin attribuuttina, jolloin rakenne olisi jotenkin seuraavanlainen:
<dokumentti> <kurssi aine="ohjelmointi"> <nimi>Javan perusteet</nimi> <tunnus>0001</tunnus> <opettaja>KA</opettaja> <toteutus>1. vuosi</toteutus> </kurssi> <kurssi ...> jne. </dokumentti>
Mutta tuo nyt oli vaan sivuhuomatus. Eli debuggaile vähän tuota, jolloin löytyy se IE:n vikakohta :)
alert(xmlDoc); prompttaa IE:lla [object]:n ja FF:llä [object XMLDocument]:n.
Ketään, joka osais neuvoa tästä eteenpäin? :)
IE:n JS-debuggaus on vähän hankalaa. Firefoxilla voisit sylkäistä olion tiedot konsoliin (tai jonnekin muualle) toSource-funktiolla, mutta IE:lle ei moista löydy (ainakaan ei ole tullut vastaan). Eli hankala homma sinänsä, muutenhan tuo koodi näyttäisi olevan ihan ok.
Olisikohan seuraavasta apua (en lukenut kuin alun): http://www.quirksmode.org/blog/archives/2005/09/
Aihe on jo aika vanha, joten et voi enää vastata siihen.