• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Analiza kodu

Object Storage Arubacloud
0 głosów
226 wizyt
pytanie zadane 26 marca 2017 w JavaScript przez marcinconn Obywatel (1,560 p.)

Mam problem z kodem HTML przy wyświetlaniu pliku XML. Poniżej załączę wszystko co udało mi się napisać do tej pory. Walidator w3s nie znalazł błędów w xml. Miałby ktoś pomysł na poprawkę?

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8" />
	<script type="text/javascript">
	var position=0;
	var plik;
	var points=0;
	function loadFile ()
	{
		if (window.XMLHttpRequest)
		{
    		plik = new XMLHttpRequest();
			plik=document.implementation.createDocument("","",null);
			plik.load("lab2-ocena.xml");
			plik.onload=ShowMe;
 		}
 		else if(window.ActiveXObject)
		{
		   
		 	plik = new ActiveXObject("Microsoft.XMLHTTP");
			plik.async=false;
			plik.load("lab2-ocena.xml");
			ShowMe();
		}
		else
		{
			alert('Error: File cannot be opened');
		}
	}
	function ShowMe ()
	{
		document.getElementById("question").innerHTML=plik.getElementByTagName("temat")[position].childNodes[0].nodeValue;
		for(i=0;i<3;i++)
		{
			document.getElementById("cb"+i+1).innerHTML=plik.getElementByTagName("odpowiedź")[3*position+i].childNodes[0].nodeValue;
		}
		lock = setTimeout(next, 10000);
	}
	function Next()
	{
		if(position<plik.getElementByTagName("temat").length -1 )
		{
			position++;
			document.getElementById("cb1").innerHTML="";
			document.getElementById("cb2").innerHTML="";
			document.getElementById("cb3").innerHTML="";
			document.getElementById("question").innerHTML="";
			ShowMe();
		}
		else
		{
			document.getElementById("kontener").innerHTML="";
			document.getElementById("next").innerHTML="Koniec";
			document.getElementById("question").innerHTML="Liczba punktów: "+ points;
		}
	}
	function validate()
	{
		for(i=0;i<3;i++)
		{
			var checkbox = document.getElementById("cb"+i+1);
			if(checkbox.checked==true && plik.getElementByTagName("odpowiedź")[3*position+i].attributes[0].value=="tak") points++;
		}
	}
	</script>
</head>

<body onload="loadFile()">
	<button name="next" id="next" onclick="Next()">Następne pytanie</button>
	<br/>
	<br/>
	<div id="kontener">
	<p id="question"></p>
	<br/>
	<br/>
	<input type="checkbox" name="cb1" id="cb1">
	<br/>
	<input type="checkbox" name="cb2" id="cb2">
	<br/>
	<input type="checkbox" name="cb3" id="cb3">
	<br/>
	</div>
</body>
</html>

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zestaw SYSTEM "zestaw.dtd">
<zestaw numer="1">
	<pytanie>
		<temat>Temat 1. Wybierz odp1</temat>
		<odpowiedź okey="tak">A1</odpowiedź>
		<odpowiedź okey="nie">B1</odpowiedź>
		<odpowiedź okey="nie">C1</odpowiedź>
	</pytanie>
	<pytanie>
		<temat>Temat 1. Wybierz odp3</temat>
		<odpowiedź okey="nie">A2</odpowiedź>
		<odpowiedź okey="nie">B2</odpowiedź>
		<odpowiedź okey="tak">C2</odpowiedź>
	</pytanie>
	<pytanie>
		<temat>Temat 1. Wybierz odp2</temat>
		<odpowiedź okey="nie">A3</odpowiedź>
		<odpowiedź okey="tak">B3</odpowiedź>
		<odpowiedź okey="nie">C3</odpowiedź>
	</pytanie>
</zestaw>

 

<!DOCTYPE zestaw [
<!ELEMENT zestaw (pytanie+,temat,odpowiedź)>
<!ELEMENT pytanie (temat,odpowiedź+)>
<!ELEMENT temat (#PCDATA)>
<!ELEMENT odpowiedź (#PCDATA)>
<!ATTLIST zestaw numer NMTOKEN #REQUIRED>
<!ATTLIST odpowiedź okey (tak|nie) #IMPLIED>
]>

 

komentarz 26 marca 2017 przez adrian17 Ekspert (344,860 p.)

Strzelam że `plik=document.implementation.createDocument` nadpisuje request. Konsola przeglądarki powinna pokazać błędy, patrzyłeś na nie?

I... czemu przesyłasz XMLa?

I... czemu masz kod dla kompatybilności z IE6?

komentarz 26 marca 2017 przez marcinconn Obywatel (1,560 p.)
XML-a przesyłam bo takie mam wytyczne i chyba na wszystkich wersjach przeglądarek(lub na zdecydowanej większości) ma działać

po usunięciu wspomnianej przez Ciebie linijki konsola wyrzuca 2 błędy:

TypeError: plik.load is not a function
TypeError: plik.getElementByTagName is not a function
komentarz 26 marca 2017 przez adrian17 Ekspert (344,860 p.)

lub na zdecydowanej większości

IE11, FF, Chrome, Safari, Edge to zdecydowana większość. IE6 dawno przestał dostawać jakiekolwiek wsparcie, większość dużych serwisów też przestało dawno wspierać IE6, 7, czasem 8 i 9. Podobnie z XMLem - to, czego was tam uczą, nie przyda się nigdzie w prawdziwej pracy. Just sayin'.

plik.load is not a function

Tak, bo XMLHttpRequest nie ma metody `load`. Nie wiem skąd ją wziąłeś.

plik.getElementByTagName

Zdecyduj się, czy `plik` to request, czy element HTML.

komentarz 26 marca 2017 przez marcinconn Obywatel (1,560 p.)
Plik XML muzi być wyświetlony. A uczą to za dużo powiedziane, na wykładach jak się coś kształtowało/powstawało, a zadania do zrobienia i "wszystko jest na w3schools". Ot nauka :(

Jak trzeba zmienić plik poza wywaleniem ActiveXObject?
komentarz 26 marca 2017 przez adrian17 Ekspert (344,860 p.)
Naprawdę nie wiem co on chce żebyście zrobili, więc nie mam jak pomoc. Sorry.
komentarz 26 marca 2017 przez marcinconn Obywatel (1,560 p.)

https://sites.google.com/site/zbislawtabor/dydaktyka/podstawy-jezykow-internetowych/javascript#TOC-JavaScript-i-XML

to są materiały źródłowe, które wykorzystał i nam kazał zrobić. po kolei 4 punkty trzeba realizować

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 689 wizyt
pytanie zadane 27 sierpnia 2016 w C i C++ przez Itan Początkujący (250 p.)
0 głosów
1 odpowiedź 428 wizyt
pytanie zadane 27 sierpnia 2016 w C i C++ przez Itan Początkujący (250 p.)
0 głosów
1 odpowiedź 536 wizyt
pytanie zadane 16 sierpnia 2016 w C i C++ przez Itan Początkujący (250 p.)

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...