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.