Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem początkującego - dlaczego nie działa ten kod?, AJAX + PHP
m010ch
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 15.12.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Witam.

Zakupiłem niedawno książkę: "AJAX i PHP. Tworzenie interaktywnych aplikacji internetowych" (wyd. Helion) i mam niestety problem już na pierwszym przykładzie z tej książki (zapewne jakiś błąd w druku, bo kod jest prawie że w 100% skopiowany z książki). Niestety - moja mała (jeszcze) wiedza na temat AJAKSA nie pozwala mi rozwiązać problemu samodzielnie (uprzedzając pytania - Google też nie pomogło).

Plik index.html:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  7. <head>
  8. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
  9. <title>AJAX i PHP: Szybki start</title>
  10. <script type="text/javascript" src="quickstart.js"></script>
  11. </head>
  12. <body onload="process()">
  13. <p>Serwer chce poznać Twoje imię: <input type="text" id="myName" /></p>
  14. <p id="ajaxMessage" />
  15. </body>
  16. </html>


Plik quickstart.js:

Kod
var xmlHttp = createXmlHttpRequestObject();

function createXmlHttpRequestObject() {
    var xmlHttp;

    if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            xmlHttp = false;
        }
    }
    else {
        try {
            xmlHttp = new XMLHttpRequest();
        }
        catch (e) {
            xmlHttp = false;
        }
    }
    
    if (!xmlHttp) {
        alert("Błąd podczas tworzenia obiektu XMLHttpRequest!");
    }
    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);
        xmlHttp.overrideMimeType("application/xhtml+xml; charset=utf-8");
    }
    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("ajaxMessage").innerHTML = "<em>" + helloMessage + "</em>";
            setTimeout("process()", 1000);
        }
        else {
            alert("Wystąpił błąd podczas uzyskiwania dostępu do serwera: " + xmlHttp.statusText);
        }
    }
}


Plik quickstart.php:

  1. <?php
  2. header("Content-Type: text/xml; charset=utf-8");
  3.  
  4. echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
  5. echo '<response>';
  6.  
  7. $name = $_GET['name'];
  8. $userNames = array('MICHAŁ', 'FILIP', 'MARCIN', 'RAFAŁ', 'GRZEGORZ');
  9.  
  10. if (in_array(strtoupper($name), $userNames)) {
  11. echo 'Witaj mistrzu ' . htmlentities($name) . '!';
  12. }
  13. else if (trim($name) == '') {
  14. echo 'Nieznajomy, podaj swoje imię!';
  15. }
  16. else {
  17. echo htmlentities($name) . ', nie znam Cię!';
  18. }
  19.  
  20. echo '</response>';
  21. ?>


Po otworzeniu strony pod Firefoksem, Firebug wyrzuca cały czas jeden i ten sam error:

  1. xmlResponse has no properties
  2. Line 47


Moje pytanie brzmi - w jaki sposób poprawić wywołanie funkcji handleServerResponse(), tak aby kod ten wreszcie zaczął działać?

Z góry dziękuję za pomoc.

Ten post edytował m010ch 30.09.2007, 11:16:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
m010ch
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 15.12.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Cytat(atomek4 @ 30.09.2007, 08:00:25 ) *
ta książka ma kilka takich niedoróbek. Ściągnij kody źródłowe ze strony Heliona i porównaj ze swoim kodem.

Uwierz mi to pierwsze co zrobiłem - kod jest identyczny jak ten w książce.

Aczkolwiek uruchomiłem go przed chwilą i... skrypt zaczął działać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Najlepsze jest to, że mój doprowadziłem do identycznej postaci i dalej nic. Spróbowałem podejść do sprawy od innej strony i sprawdziłem kodowania w jakich tworzone były pliki na potrzeby książki - okazało się, że właśnie tu leży problem! Pliki quickstart.js i quickstart.php stworzone przez autora, kodowane były w ISO-8859-2 - ja mam automatycznie ustawione kodowanie UTF-8 dla wszystkich plików. Po zmianie w Notepad++ na Koduj w ANSI (+ Koduj w UTF-8 bez BOM) - zaczęło działać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pytanie jednak mam nadal - dlaczego pliki te mają problemy z działaniem przy ustawionym kodowaniu UTF-8?

p.s. Widzę, że nadal są problemy z polskimi znakami (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Gdy wpisze w inputa: Filip, Marcin czy Grzegorz, skrypt działa oka, ale gdy próbuje użyć go dla imienia: Rafał czy Michał dostaje:

Kod
Błąd parsowania XML: niezdefiniowana jednostka Obszar: http://localhost/ajax/quickstart/quickstart.php?name=Rafa%C5%82 Numer linii 1, kolumna 70:

Kod
Błąd parsowania XML: niezdefiniowana jednostka Obszar: http://localhost/ajax/quickstart/quickstart.php?name=Micha%C5%82 Numer linii 1, kolumna 71:


Ten post edytował m010ch 30.09.2007, 11:22:58
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.12.2025 - 12:44