brak wyśwetlania pliku XML

Odpowiedz Nowy wątek
2011-07-25 16:46
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/D[...]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


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"
edytowany 1x, ostatnio: Eldiane, 2011-07-25 16:53
Masz niedomkniętego diva #myDivElement - hauleth 2011-07-25 18:23

Pozostało 580 znaków

2011-07-25 17:19
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.

edytowany 1x, ostatnio: marcos3131, 2011-07-25 17:20
Nie, mogą być takie same znaczniki, co najwyżej musi być tylko jeden element główny. W XHTML-u możesz mieć wiele <p> na przykład. - Ktos 2011-07-25 18:05

Pozostało 580 znaków

2011-07-25 17:28
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


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"

Pozostało 580 znaków

2011-07-25 20:06
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.

edytowany 5x, ostatnio: marcos3131, 2011-07-25 20:25

Pozostało 580 znaków

2011-07-25 21:01
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ł


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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