![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zablokowani Postów: 167 Pomógł: 2 Dołączył: 15.02.2004 Ostrzeżenie: (30%) ![]() ![]() |
Czy moglibyście zerknąć dlaczego funkcja xml2array napisana w JavaScript nie działa pod Internet Explorer i Operę? Działa tylko pod Fire Foxem. Jest ona odpowiedzialna za proste sparsowanie XML-a, który trafia do funkcji biblioteki advAjax.
Kod function godzina() { advAJAX.get({ url: 'ajax.php', onSuccess: function(obj) { var result = xml2array(obj.responseXML); document.getElementById('godzina').innerHTML = result["godzina"]; window.setTimeout('godzina()', 1000); }, }); } function xml2array(xml) { var result = new Array(); var key = null; var value = null; for (var i = 0; i < xml.childNodes.length; i++) { key = xml.getElementsByTagName("name")[i].getAttribute("id"); value = xml.getElementsByTagName("name")[0].firstChild.nodeValue; result[key] = value; } return result; } godzina(); Dane w formacie XML: Kod <data> <name id="godzina">17:00</name> </data> Proszę o pomoc i rozwiązanie problemu z funkcją xml2array. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 2 258 Pomógł: 16 Dołączył: 21.09.2004 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Jeśli plik xml masz postaci:
to Twoja pętla jest źle skonstruowana. Przejdzie po childNodes głównego korzenia DOM czyli po elementach <data>. Tych możesz mieć tylko jeden, bo jest to element najwyższego poziomu, więc pętla przejdzie raz, wtedy wyszukasz element name, o indeksie "i" - który jest indeksem <data> w ....childNodes głównego korzenia. I dlatego po części to działa (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) Powinieneś to rozwiązać tak: Kod var start = xml.getElementsByTagName("data")[0]; for (var i = 0; i < start.childNodes.length; i++) { if(start.childNodes[i].nodeName=="name") { key = start.childNodes[i].getAttribute("id"); value = start.childNodes[i].firstChild.nodeValue; result[key] = value; } } ------ Cytat Pierwsza rzecz, którą widzę - nie ważne ile elementów 'data' obok siebie będziesz miał w XML'u w IE pętla for przejdzie tylko raz Chodzi o to że ważne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Elementów najwyższego poziomu może być cała jedna sztuka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Inaczej dokument nie będzie poprawny. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 08:30 |