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
atomek4
post
Post #2





Grupa: Zarejestrowani
Postów: 179
Pomógł: 1
Dołączył: 8.03.2007
Skąd: Łódź

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


Chyba wiem o co chodzi, błąd tym razem dotyczy funkcji strtoupper" title="Zobacz w manualu PHP" target="_manual. Ma ona problemy ze zrobieniem wielkiej litery z polskiego znaku. Rozwiązanie znalazłem na naszym forum.
Teraz kod w pliku .php, może wyglądać tak:
  1. <?php
  2. $userNames = array('CRISTIAN', 'BOGDAN', 'FILIP', 'MIHAI', 'YODA', 'MICHAŁ');
  3. $name = mb_convert_case($name, MB_CASE_UPPER, "UTF-8");
  4. if (in_array($name, $userNames))
  5. ?>


Oczywiście reszta tak samo. Mam nadzieję, że to rozwiąże problem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

edit
: Tak masz racje, bo ja już potem nie zmieniałem tych wielkich liter. Można by tą zamianę na wielkie wpisać w tym in_array (tak jak było poprzednio), bo tu chodzi tylko porównanie. Zmienna pozostała by wtedy niezmieniona. Ja tylko tak napisałem, żeby było czytelniej.

Nie ma za co, po to jest forum. Sam mam tą książkę, ale tak szczegółowo to nawet nie analizowałem tego przykładu przy czytaniu. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował atomek4 30.09.2007, 18:19:26
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 27.12.2025 - 16:02