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: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%)
|
=> eMartio
Pownieneś dopisać w jaki sposób objawia się nie działanie w IE? Wywala błąd? Wyrzuca nie oczekiwane dane? Nic nie wyrzuca i nie ma błędu? Napisałem o możliwie najprostszym kodzie, bo nie każdy używając ajax'a korzysta z biblioteki advAjax. Nie mniej po przyjrzeniu się, zakładając, że advAjax przekazuje wszystko poprawnie faktycznie nie potrzeba tego upraszczać. 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. Po prostu IE ma trochę inaczej zaimplementowany responseXML. W IE pierwszym i ostatnim dzieckiem responseXML jest zawsze element 'xml' i dopiero on zawiera strukturę, którą przekazałeś. W FF (i podejrzewam innych) Twoja struktura jest bezpośrednio w responseXML. Druga rzecz.. to nie bardzo rozumiem, czemu w pętli for druga linia odwołuje się do elementu 'name' pod indeksem 0: Kod value = xml.getElementsByTagName("name")[0].firstChild.nodeValue; Chyba tam powinna być zmienna 'i' zamiast 0. Trzecia rzecz, która być może właśnie sprawia, że w IE kod nie chodzi to kwestia pisowni nazw atrybutów. Nie jestem pewiem czy IE podobnie obsługuje dokument XML podany przez xmlHttpRequest ale przynajmniej w czytaniu HTML'a zawsze przyjmuje atrybuty pisane tylko dużymi literami (nawet jeśli w strukturze masz pisane małymi). Na próbę zapisz tak: Kod xml.getElementsByTagName("name")[i].getAttribute("ID"); ..i zobacz czy IE to łyknie. To tyle ile mi przychodzi do głowy. Generalnie myślę, że sam poprzez alerty czy z pomocą script debuggera możesz szybko dojść gdzie jest różnica. =>TomASS Cytat FF bardzo po 'macoszemu' traktuje pliki XML, nie zwraca uwagi na drobne błędy, za to IE (na którego wszyscy narzekają) nie toleruje błędów: to nie jest do końca poprawny kod XML: Kod data> <name id="godzina">17:00</name> </data> daj na początku np: Kod <?xml version="1.0" encoding="UTF-8"?> a dotego jeśli genrujesz pliki przy pomocy php musisz dać:
Tylko ostatnie jest prawdą, reszta to bzdury. Dokument XML powinien zawierać deklaracje ale nie musi. Dokument XML bez deklaracji też jest poprawnie sformułowanym dokumentem. Zarówno IE i FF podchodzą do tego poprawnie, tzn parsują dokument jak XML (w domyślnym dla XML'a kodowaniu utf-8) kiedy tej deklaracji nie ma. Podaj mi przykład, w którym FF ignoruje błędy struktury XML, których IE nie toleruje?? Ten post edytował mariuszn3 4.05.2006, 14:11:30 |
|
|
|
Martio [advAJAX][XML] Problem z parsowaniem XML 2.05.2006, 20:08:23
mariuszn3 Podaj najprostszy możliwie przykład, który nie kor... 3.05.2006, 12:20:28
Martio Cytat(mariuszn3 @ 2006-05-03 13:20:28)Podaj n... 4.05.2006, 08:18:17
TomASS FF bardzo po 'macoszemu' traktuje pliki XM... 4.05.2006, 08:24:37
eMartio Cytat(TomASS @ 2006-05-04 07:24:37)FF bardzo ... 4.05.2006, 11:04:58
eMartio Cytat(mariuszn3 @ 2006-05-04 12:29:16)Druga r... 5.05.2006, 09:51:35
revyag Jeśli plik xml masz postaci:
[XML] pobierz, plaint... 5.05.2006, 12:17:15
Martio Cytat(revyag @ 2006-05-05 13:17:15)Jeśli plik... 6.05.2006, 12:01:47 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 19:23 |