Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Javascript ja XML

slitzu [12.01.2007 21:09:07]

#

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>

Olga [13.01.2007 18:13:53]

#

Kummassa alertissa toi 0 tulee ja miltä näyttää xml-dokumentti?

slitzu [13.01.2007 19:46:13]

#

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>

Olga [13.01.2007 21:41:17]

#

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 :)

slitzu [14.01.2007 00:15:51]

#

alert(xmlDoc); prompttaa IE:lla [object]:n ja FF:llä [object XMLDocument]:n.

slitzu [16.01.2007 08:11:01]

#

Ketään, joka osais neuvoa tästä eteenpäin? :)

Olga [16.01.2007 08:25:09]

#

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/xmlhttp_notes_r.html

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta