ďťż

[AJAX || PHP]Czytanie dokumentu XML

       

Podstrony


telcocafe

Witam, zamówiłem sobie książkę pt. "AJAX i PHP Tworzenie interaktywnych aplikacji internetowych". Książka jest kompetentna, zawiera dużo przydatnych przykładów, ale... pierwszy przykład z książki i nie działa... :/ Przerobiłem już 3/4 książki, ale chodzą tylko przykłady gdzie nie ma pracy na plikach XML. Daję przykład "quickstart"

index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>AJAX i PHP - Szybki start</title> <script type="text/javascript" src="quickstart.js"></script> </head> <body onload='process()'> Serwer chce poznac Twoje imie: <input type="text" name="myName" /> <div id="divMessage" /> </body> </html>

quickstart.js:
var xmlHttp = createXmlHttpRequestObject(); function createXmlHttpRequestObject() { var xmlHttp; try { xmlHttp = new XMLHttpRequest(); } catch(e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } if(!xmlHttp) alert("Wykonanie obiektu XMLHttpRequest nie powiodlo sie."); else return xmlHttp; } function process() { if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0) { name = encodeURIComponent(document.getElementById('myName').value); xmlHttp.open("GET", "quickstart.php?name=" + name, true); xmlHttp.onreadystatechange = handleServerResponse; xmlHttp.send(null); } else setTimeout('process()', 1000); } function handleServerResponse() { if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { xmlResponse = xmlHttp.responseXML; xmlDocumentElement = xmlResponse.documentElement; helloMessage = xmlDocumentElement.firstChild.data; document.getElementById('divMessage').innerHTML = '<i>' + helloMessage + '</i>'; setTimeout('process()', 1000); } else { alert("Wystapil blad podczas uzyskiwania dostepu do serwera:\n" + xmlHttp.statusText); } } }
Zmieniłem tylko funkcję "createXmlHttpRequestObject" bo ta chodzi i jest mniej skomplikowana.

i ostatni plik
quickstart.php
<?php header('Content-Type: text/xml'); echo '<?xml version="1.0" encoding="utf-8" standalone="yes"?>'; echo '<response>' $name = $_GET['name']; $userNames = array('BOGDAN', 'MIHAI', 'YODA'); if(in_array(strtoupper($name), $userNames)) echo 'Witaj mistrzu '.htmlentites($name).'!'; else if(trim($name) == '') echo 'Nieznajomy, podaj swoje imie!'; else echo htmlentites($name).', nie znam Cie!'; echo '</response>'; ?>

Powyższy przykład nie chodzi :( Moze tutaj nie ma czystego pliku XML do odczytu, ale tak samo (znaczy nic :P :( ) dzieje się z normalnym plikiem XML
Przykład? Proszę bardzo :):

books.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <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()"> Serwerze, jakie sa Twoje ulubione ksiazki? <div id="myDivElement" /> </body> </html>

books.xml:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <response> <books> <book> <title> AJAX i PHP. Tworzenie interaktywnych aplikacji internetowych </title> <isbn> 1-904811-85-5 </isbn> </book> <book> <title> PHP 5 i MySQL. Zastosowania e-commerce </title> <isbn> 1-59059-392-8 </books> </response>

books.js:
var xmlHttp = createXmlHttpRequestObject(); function createXmlHttpRequestObject() { var xmlHttp; try { xmlHttp = new XMLHttpRequestObject(); } catch(e) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } if(!xmlHttp) alert("Blad podczas tworzenia obiektu XMLHttpRequest."); else return xmlHttp; } function process() { if(xmlHttp) { try { xmlHttp.open("GET","books.xml",true); xmlHttp.onreadystatechange = handleRequestStateChange; xmlHttp.send(null); } catch(e) { alert("Nie moge polaczyc sie z serwerem:\n" + e.toString()); } } } function handleRequestStateChange() { if(xmlHttp.readyState == 4) { if(xmlHttp.status == 200) { try { handleServerResponse(); } catch(e) { alert("Blad odczytu odpowiedzi: " + e.toString()); } } else { alert("Pojawil sie problem w uzyskaniu danych:\n" + xmlHttp.statusText); } } } function handleServerResponse() { var xmlResponse = xmlHttp.responseXML; xmlRoot = xmlResponse.documentElement; titleArray = xmlRoot.getElementsByTagName("title"); isbnArray = xmlRoot.getElementsByTagName("isbn"); var html = ""; for(var i=0; i<titleArray.lenght; i++) html += titleArray.item(i).firstChild.data + ", " + isbnArray.item(i).firstChild.data + "<br />"; myDiv = document.getElementById("myDivElement"); myDiv.innerHTML = "Serwer mowi: <br />" + html; }

Wie ktoś może czemu nie mogę robić nic związanego z plikami XML?? Konfugurowałem Apache, PHP i MySQL (on narazie nie ma nic do rzeczy)
według instrukcji z tyłu książki...
Jeśli ktoś wie co może być przyczyną, proszę o odpowiedź :/ Poszukałbym na google, ale nie wiem czego tu się chwycić.



Po pierwsze, to żaden skrypt nie chodzi. ;P On ma Ci biegać ;P

Czy te przykłady są przepisane czy może skopiowane z przykładów? Miałem raz tak, że dzień szukałem błędu, a okazało się, że innerHTML napisałem z dużej litery :)

xmlHttp = new XMLHttpRequestObject();
Na pewno tutaj jest błąd, bo powinno być

xmlHttp = new XMLHttpRequest();
Ale to tylko na początek, bo jak to poprawiłem, to też mi nie chodzi.
Sprawa jest dziwna, bo też kupiłem tą książkę i korzystając z przykładów napisałem swoją stronę. No i u mnie działa :)
Polecam kurs AJAXa na w3schools, jest o wiele krótszy, ale jest samo gęste.

@chodnik:
Tak, sry bo te funkcje pisałem na poczekaniu szybko, ale mam dobrze na dysku :P
@pbnan:
Akurat te przepisane, ale tam jest potem "Co właśnie zrobiliśmy:" i "prawie" po linijce jest wyjaśniane co i jak. Mimo to sprawdzę to już nie wiem który raz, ale skoro tak mówisz to może jednak przeoczyłem jakiś średnik czy coś :P
Użytkownik Eneje edytował ten post 11 czerwiec 2007, 16:46


Wiesz co? Ty może sprawdź dema z książki - bez przepisywania, czy Ci działają. Jeśli tak, to znaczy, że źle przepisałeś. Jeśli nie... To coś może się poradzi. :)

PS. FF -> Narzędzia -> Konsola błędów Twoim przyjacielem ;)

Gdyby to było takie proste...
a) Skąd dema z książki :P? Nie było płytki :(
B) FF -> Narzędzia -> Konsola błędów moim wrogiem :P otóż zawsze pokazuje 2 błędy, pierwsza w użyciu <!DOCTYPE, nie ważne co tam wpisze, a 2 to, że ActiveXObject("Microsoft.XMLHTTP") is not defined, a mimo, że na innych wywala te błędy to strony i tak chodzą :shocking:

a. ftp://ftp.helion.pl/...lady/ajaphp.zip
b. to narzędzie uratowało mnie kilka razy od powieszenia się przez Javascript ;)

a. Dzięki za link, zaraz zobaczę czy działa
b. Ciebie może i tak, ale u mnie wywala błąd który nie powinien być błędem :P, ale z reguły się przydaje :)

:omg: Działa, a u mnie błędy takie, że sie nie przyznaje na forum bo mnie jeszcze zbanują :D Dzięki za linka, teraz debugowanie będzie łatwiejsze :P
Użytkownik Eneje edytował ten post 11 czerwiec 2007, 18:30

b. Ciebie może i tak, ale u mnie wywala błąd który nie powinien być błędem :P , ale z reguły się przydaje :)

Ekhm... to ja może będę do jutra literka po literce sprawdzał :omg: :oops: pierwszy przykład z brzegu, quickstart chodzi :whistling: Zobaczę jaki błąd robiłem, i zapewne odkryje taki błąd, że pozostaje sie tylko powiesić :D :P

b - i Bogu dzięki, że jest błąd. Nie przeżyłbym, gdyby FF obsługiwał ActiveX (największa dziura w IE, imo).

Ad edit: nie wieszaj się, AJAX jest piękny ;P

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.