AJAX w Chrome - xhr.responseXML zwraca wartość null


(#r2d2#) #1

Witam

Mam problem z przeglądarką Chrome. Pobieram informacje na moją stronę za pomocą AJAX. Serwer wysyła mi plik XML, z którego potem wyświetlam potrzebne dane. W Firefoxie działa to bardzo dobrze, jednak w Chrome jest dziwny błąd: xhr.responseXML zwraca wartość null. Ktoś wie jak to obejść?

Nie wiem jak jest w Internet Explorerze, bo nie mam możliwości zainstalowania IE10.

Poniżej podaję mój kod:

var xhr=new XMLHttpRequest();

	xhr.open("GET", "./ajax.php", true);

	xhr.addEventListener("readystatechange", wyswietl, false);

	xhr.send(null);


	function wyswietl() {

		if (xhr.readyState==4) {

			xhr.removeEventListener("readystatechange", wyswietl, false);


			if(xhr.status==200) {

				console.log("Text:", xhr.responseText);

				console.log("Text:", xhr.responseXML);

			} else {

				console.error("Błąd: nie można pobrać");

			}

		}

	}

(Konrad Kosowski) #2

http://bit.ly/1aLgbWC


(#r2d2#) #3

Ktoś pomoże?

Dodam że w PHP mam ustawione

header("Content-type: text/xml; charset=\"utf-8\"");

a XML ma nagłówek

<?xml version="1.0" encoding="utf-8"?>

Próbowałem też z

header("Content-type: application/xml; charset=\"utf-8\"");

ale nic to nie daje.


(ra-v) #4

ajax.php

<?php

(#r2d2#) #5

Hmm, powiem szczerze, że nie wiem co się stało, ale faktycznie xml już nie ma wartości null. Ale problem dalej jest, tylko w innym miejscu. Dalej próbuję zrobić coś takiego:

var nauczyciele=xml.getElementsByTagName("nauczyciele")[0].getElementsByTagName("nauczyciel");

for (var i=0; i
	var id=nauczyciele[i].getElementsByTagName("id")[0].innerHTML;

	var imie=nauczyciele[i].getElementsByTagName("imie")[0].innerHTML;

	var nazwisko=nauczyciele[i].getElementsByTagName("nazwisko")[0].innerHTML;

}

Zmienna nauczyciele ma wartość undefined, a co za tym idzie id, imie i nazwisko również są _undefined_Plik XML wygenerowany przez ajax.php wygląda tak:

<?xml version="1.0" encoding="utf-8"?>


12
Jan
Kowalski


11
Barbara
Nowak


23
Andrzej
Kiepski

Pętla wykonuje się 3 razy, czyli nauczyciele.length musi zwracać 3.

Znów problemu nie ma w Firefox’ie, tam wszystko działa bez problemu.


(ra-v) #6

Zamiast innerHTML użyj . textContent


(#r2d2#) #7

@ra-v: wielkie dzięki! :smiley: