Asynchroniczne wyświetlanie napisu

Odpowiedz Nowy wątek
2011-09-03 12:55
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


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

Pozostało 580 znaków

2011-09-03 13:00
0

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


edytowany 1x, ostatnio: Patryk27, 2011-09-03 13:01

Pozostało 580 znaków

2011-09-03 13:02
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


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"
edytowany 2x, ostatnio: Eldiane, 2011-09-03 13:04
Java TO NIE TO SAMO, co JavaScript!!! - Patryk27 2011-09-03 13:06

Pozostało 580 znaków

2011-09-03 13:07

Błąd jest chyba tutaj:

function handleServerResponse{

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


Pozostało 580 znaków

2011-09-03 13:11
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


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"
Wrzuć kod w znaczniki <code=javascript>(tutaj kod)</code> - to będzie on bardziej czytelny ;) - Patryk27 2011-09-03 13:18
BTW, próbowałeś pod różnymi przeglądarkami? - Patryk27 2011-09-03 13:18
Nom, próbowałem, zaraz zrobię z znacznikami code - Eldiane 2011-09-03 13:19

Pozostało 580 znaków

2011-09-03 13:47
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?


"Nie ważne by być lepszym od innych, ważne by być lepszym niż było się wczoraj"
edytowany 1x, ostatnio: Eldiane, 2011-09-03 14:52

Pozostało 580 znaków

2011-09-03 14:55
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ć).


edytowany 2x, ostatnio: Patryk27, 2011-09-03 14:59
z tym ActiveXObject("Microsoft.XMLHTTP") nie mylisz się =] - Eldiane 2011-09-03 15:04
Hint Patryku: AJAXa w ogóle wymyślił Microsoft. - Demonical Monk 2011-09-03 18:50
Nigdy nie byłem dobry z historii :] - Patryk27 2011-09-03 20:29

Pozostało 580 znaków

2011-09-03 15:04
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


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

Pozostało 580 znaków

2011-09-03 19:11
bswierczynski
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 :)

Pozostało 580 znaków

2011-09-05 16:08
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ę


"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