brak wyśwetlania pliku XML

0

Zakupiłem książkę "AJAX i PHP tworzenie interaktywnych aplikacji internetowych", wszystko szło wspaniale do czasu natrafienia na dość oporny przykład a mianowicie, chciałbym aby server wyświetlił zawartość pliku XML zgodnie z przykładem w książce, jednak po przepisaniu przykładu oraz dwukrotnym sprawdzeniu kodu nadal nie widać efektów, być może któryś z bardziej doświadczonych użytkowników mógłby spojrzeć na to fachowym okiem, oto pliki jakie wchodzą w grę

books.html

<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Podstawy technologii AJAX - JavaScript i XML</title> <script type="text/javascript" src="books.js"></script> </head> <body onload="process()">

Serverze, jakie sa twoje ulubione ksiazki?

</body> </html>

books.js

//Przechowuje obiekt klasy XMLHttpResponse
var xmlHttp = createXmlHttpRequestObject();

//Tworzy obiekt klasy XMLHttpRequest
function createXmlHttpRequestObject()
{
//Bedzie przechowywac odwolanie do obiektu klasy XMLHttpRequest
var = xmlHttp;
//Tworzy obiekt klasy XMLHttpRequest
try{
//Przy zalozeniu ze strona otwierana jest w IE7 lub nowszej
xmlHttp = new XMLHttpRequest();
}
catch (e){
//IE6 lub starszej
try{
xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
}
catch(e){
}
}
//Zwraca utworzony obiekt lub wyswietla komunikat o bledzie
if(!xmlHttp)
alert("podczas tworzenia obiektu klasy XMLHttpRequest wystapil blad.");
else
return xmlHttp;
}

//Odczytuje zawartosc pliku xml umieszczonego na serverze
function process()
{
//Kontynuuje tylko gdy obiekt xml zostal utworzony
if(xmlHttp)
{
//Proboje nawiazac polaczenie z serverem
try{
//Inicjuje odczyt pliku z servera
xmlHttp.open("GET", "books.xml", true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
}
catch(e){
alert("Nie udalo sie nawiazac polaczenia z serverem:\n"+e.toString();
}
}
}

//Funkcja wywolana po zmianie statusu zadania HTTP
function handleRequestStateChange()
{
//Gdy metoda readyState zwraca wartosc 4, odczytuje odpowiedz z servera
if(xmlHttp.readyState == 4)
{
try{
//przetwarza odpowiedz nadeslana z servera
handleServerResponse();
}
catch(e){
//Wyswietla komunikat o bledzie
alert("Blad podczas odczytywania odpowiedzi: "+ e.toString());
}
}
else{
//wyswietla wiadomosc okreslajaca status zadania
alert("podczas pobierania danych wystapil blad:\n"+xmlHttp.statusText;
}
}

//Funkcja obslugujaca odpowiedz servera
function handleServerResponse()
{
//odczytuje wiadomosc wyslana przez Server
var xmlResponse = xmlHttp.responseXML;
//pobiera glowny znacznik dokumentu XML
xmlroot = xmlResponse.documentElement;
//Pobiera tablice zawierajace tytul ksiazek i ich numery ISBN
titleArray = xmlRoot.getElementByTagName("title");
isbnArray = xmlRoot.getElementByTagName("isbn");
//generuje odpowiedz w formacie HTML
var html = "";
//Iteracyjnie sprawdza wszystkie elementy tablicy i generuje kod HTML
for (var i = 0; i<titleArray.lenght; i++)
html += titleArray.item(i).firstChild.data + ", " + isbnArray.item(i).firstChild.data + "
";
//Pobiera odwolanie do znacznika

w kodzie strony WWW
myDiv = document.getElementById("myDivElement");
//wyswietla dane
myDiv.innerHTML = "

Server mowi:

" + html;
}
</p>

oraz books.xml

<?xml version="1.0" encoding="UTf-8" standalone="yes"?>

<response> <books> <book> <title> AJAX i PHP. Tworzenie interaktywnych aplikacji internetowych </title> <isbn> 83-246-0644-0 </isbn> </book> <book> <title> PHP 5 i MySql. Zastosowania e-commerce </title> <isbn> 83-7361-830-9 </isbn> </book> <book> <title> ASP.NET 2.0. Tworzenie witryn internetowych z wykorzystaniem C# i Visual Basic </title> <isbn> 978-83-246-0999-4 </isbn> </book> </books> </response>

Proszę o szybką odpowiedź, z góry dziękuje
Eldiane

//Edit
Zauważyłęm błąd w znaczniku <response> ... </response> został poprawiony lecz błąd występuje nadal

0

Nie jestem specem, ale w XML-u chyba nie powinno być takich samych znaczników (chodzi mi o "book"), bo skąd będzie wiadomo, który wziąć? xD Mogę najwyżej ci doradzić sprawdzenie tego.

0

Niestety nic nie pomaga, chodź poprawiłem kilka literówek i przeglądarka zgłasza błąd

"podczas pobierania danych wystąpił błąd: OK"

wiec problem musi występować w konstrukcji if(xmlHttp.readyState == 4) ponieważ wyświetla on zawartość instrukcji

else{
    //wyswietla wiadomosc okreslajaca status zadania
    alert("podczas pobierania danych wystapil blad:\n"+xmlHttp.statusText);
}

Może teraz ktoś będzie mógł znaleźć rozwiązanie problemu

0

Ten link ci może pomóc, dobre tutoriale tam są. Musisz trochę obczajać angola. http://www.w3schools.com/xml/xml_http.asp
http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp
Sam na razie się tym nie zajmuję, ale obczajałem trochę ostatnio i będę jeszcze niedługo z tego się uczyć.
Do sprawdzenia składni XML-a proponuję użyć jakiegoś XML-validator'a. Na tej stronie też się on znajduje.

0

Dzięki za tutoriale, będę miał chwilkę to do nich zajrzę :)

Ale niestety nic nie napisałeś/aś na temat mojego problemu z tymi plikami =] inne pliki przykładów z książki są bez zarzutu... Trochę mnie to dziwi że tylko ten nie zadziałał

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0