Asynchroniczne wyświetlanie napisu

0

Postanowiłem troszkę poszerzyć wiedzę na temat technologii AJAX, jednak mój kod nie jest sprawy, bardzo prosiłbym o sprawdzenie i kilka sugestii na ten temat

Oto pliki jakie posiadam

Index.html:

<html>
<head>
  <title>AJAX 1.0</title>
  <script type="text/javascript" src="quickstart.js"></script>
</head>                          
<body onload='process()'>
  Server pragnie poznac twoje imie
  <input type="text" id="myName">
  <div id="divMessage">
</body>
</html>

quickstart.js:


// JavaScript Document
var xmlHttp = createXmlHttpReqestObject();

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("blad")
  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");
    }
  }
}

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('mateusz', 'yoda');
  if(in_array(strtoupper($name), $userNames))
    echo 'witaj mistrzu '.htmlentities($name).'!';
  else if (trim($name) == '')
    echo 'podaj swoje imie!';
  else
    echo 'Nie znam Cie!';

  echo '</response>'
?>

Z góry dziękuje. Eldiane

0

Ale plik uruchamiasz na serwerze, a nie poprzez dwuklik na pliku?
Poza tym, łatwiej jest użyć jakiegoś frameworka, np.:jQuery.

0

Nie przez dwuklik, odpalam na serverze, XAMPPie dokladnie
ps: Java włączona

Tutaj bardziej chodzi o to że kupiłem książkę od AJAX, chciałem cokolwiek wiedzieć na temat tej technologii, no ale niestety, przykłady w książce nie chcą działać i nie wiem czy to ja coś źle robię czy może tak książka nie jest za dobra

0

Błąd jest chyba tutaj:

function handleServerResponse{

Nie sądzisz, że czegoś tutaj brakuje?

0

Boże trzeba być ślepym, jak ja nienawidzę literówek...

Ale to nadal nie rozwiązało problemu, server dalej nie wysyła asynchronicznie żadnych danych

0

Jeszcze może jakieś sugestie, bo to już nie pierwszy raz kiedy mam kłopoty z AJAX, coś opornie idą mi te przykłady :/

Zdebugowałem kod w firebug'u i oto jakie dwa błędy się pojawiły:

createXmlHttpReqestObject is not defined var xmlHttp = createXmlHttpReqestObject();
xmlHttp is undefined if(xmlHttp.readyState == 4 || xmlHttp.readyState == 0)

Może teraz ktoś pomoże?

1

Użyj jQuery - będzie łatwiej, mniej kodu oraz mniej nerwów ;)
Ale jeżeli wolałbyś pozostać przy takim sposobie, to zobacz ten artykuł: http://www.cristiandarie.ro/asp-ajax/Async.html
Poza tym, ZTCW new ActiveXObject("Microsoft.XMLHTTP") to wymysł M$ i nie ma go w innych przeglądarkach, oprócz IE (mogę się mylić).

0
Patryk27 napisał(a)

Użyj jQuery - będzie łatwiej, mniej kodu oraz mniej nerwów ;)
Ale jeżeli wolałbyś pozostać przy takim sposobie, to zobacz ten artykuł: http://www.cristiandarie.ro/asp-ajax/Async.html

Ja wiem, dobra rada z jQuery, ale chciałem chodź odrobinkę popracować z AJAX, wiedzieć "co się z czym je", nie chodzi o musowe używanie tego sposobu w praktyce.
Poza tym posiedziałem trochę na necie i znalazłem temat na innym forum http://forum.ks-ekspert.pl/to[...]ax-phpczytanie-dokumentu-xml/ opisany jest dokładnie ten sam problem co mój i zostały podane źródła do kodów z książki, po prostu teraz zerknę sobie co robiłem źle i postaram poprawić swoje błędy.

Dzięki za pomoc, gdy już skończę z AJAX na pewno zabiorę się za jQuery :)

Eldiane

1

Wciąż masz literówkę!

Próbujesz wywołać createXmlHttpReqestObject(), czyli brakuje "e" w członie "Request". A zadeklarowałeś funkcję o poprawnej nazwie, czyli z "e".

Szanowny panie kolego, na takie błędy wytłumaczenia nie ma! Trzeba się nauczyć podstaw debugowania, nie ma na to bata. Chwalebne, że odpaliłeś debugger i że chcesz się pobawić gołym ajaxem, a nie jQuery. Ale jeśli przeglądarka mówi, że jakaś funkcja, którą próbujemy wywołać, nie jest zdefiniowana, to natychmiast szukamy literówek :)

0

Zapamiętam tą rade na długie lata :)
Literówki zawsze mnie prześladowały, ale wole przepisać kod i później zobaczyć czy działa, przynajmniej będę wiedział jak się coś pisze w praktyce, nie bawi mnie uruchamianie pobranych plików z Internetu. Zawsze porównuje to z pisaniem ściąg, lepiej takową ściągę napisać i bynajmniej jakieś wiadomości zostaną w głowie, niż obijać się i iść na łatwiznę

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