Szybki start z Ajax'em

Mariusz Siwko
05.09.2015

Na podstawie umiejętności jakich zdobyłem dzięki książce: "AJAX I PHP - Tworzenie interaktywnych aplikacji internetowych" i skryptu umieszczonego na jej łamach, stworzyłem system interaktywnie działający z parserem PHP, bez przeładowywania strony. Po podaniu swojego imienia, serwer wykona natychmaist jakąś akcję. W naszym wypadku jest to odpowiedź tekstowa. Zatem tworzymy skrypt 'quickstart'.


1.)index.html

Kod html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>AJAX - nasz pierwszy skrypt</title>
 </head>
<body onload='process()'>
 Serwer chce poznać twoje imię:<input type="text" id="myName" />
<div id="divMessage" />
</body>
</html>

2.) quickstart.js

Kod:

// przechowuje odwołanie do obiektu XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// zwraca obiekt XMLHttpRequest
function createXmlHttpRequestObject()
{
  // przechowa odwołanie do obiektu XMLHttpRequest
  var xmlHttp;
  // jeśli uruchomiony jest Internet Explorer
  if(window.ActiveXObject)
  {
    try
    {
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
      xmlHttp = false;
    }
  }
  // jeśli uruchomiona jest Mozilla lub inne przeglądarki
  else
  {
    try
    {
      xmlHttp = new XMLHttpRequest();
    }
    catch (e)
    {
      xmlHttp = false;
    }
  }
  // zwraca utworzony obiekt lub wyświetla komunikat o błędzie
  if (!xmlHttp)
    alert("Błąd podczas tworzenia obiektu XMLHttpRequest.");
  else
    return xmlHttp;
}

// wysyła asynchroniczne żądanie protokołem HTTP korzystając z obiektu XMLHttpRequest
function process()
{
  // kontynuuje jedynie jeśli obiekt xmlHttp nie jest zajęty
  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
  {
    // pobiera imię wpisane przez użytkownika w formularzu
    name = encodeURIComponent(document.getElementById("myName").value);
    // wykonuje stronę quickstart.php na serwerze
    xmlHttp.open("GET", "quickstart.php?name=" + name, true); 
    // definiuje metodę obsługi odpowiedzi serwera
    xmlHttp.onreadystatechange = handleServerResponse;
    // wysyła żądanie do serwera
    xmlHttp.send(null);
  }
  else
    // jeśli połączenie jest zajęte, ponawia próbę po 1 sekundzie
    setTimeout('process()', 1000);
}

// wykonywana automatycznie po otrzymaniu odpowiedzi z serwera
function handleServerResponse()
{
  // kontynuuje jedynie jeśli transakcja została zakończona
  if (xmlHttp.readyState == 4)
  {
    // status 200 oznacza pomyślne ukończenie transakcji
    if (xmlHttp.status == 200)
    {
      // wyodrębnia wiadomość XML wysłaną z serwera
      xmlResponse = xmlHttp.responseXML;
      // pobiera element nadrzędny ze struktury pliku XML
      xmlDocumentElement = xmlResponse.documentElement;
      // pobiera wiadomość tekstową pierwszego potomka elementu document
      helloMessage = xmlDocumentElement.firstChild.data;
      // aktualizuje dane wyświetlane klientowi informacjami otrzymanymi z serwera
      document.getElementById("divMessage").innerHTML = '<i>' + helloMessage + '</i>';
      // ponawia sekwencję
      setTimeout('process()', 1000);
    }
    // dla statusu protokołu HTTP innego niż 200 zgłasza błąd
    else
    {
      alert("Wystąpił błąd podczas uzyskiwania dostępu do serwera: " + xmlHttp.statusText);
    }
  }
}

3.) quickstart.php

Kod php:

<?php
// wygenerujemy dane wyjściowe jako plik XML
header('Content-Type: text/xml');
// generacja nagłówka XML
echo '<?xml version="1.0" encoding="utf-8" standalone="yes"?>';
// utworzenie elementu <response>
echo '<response>';
 
// pobranie imienia użytkownika
$name = $_GET['name'];
// generacja danych wyjściowych w zależności od podanego imienia
$userNames = array('CRISTIAN', 'BOGDAN', 'FILIP', 'MIHAI', 'YODA');
if (in_array(strtoupper($name), $userNames))
  echo 'Witaj mistrzu ' . htmlentities($name) . '!';
else if (trim($name) == '')
  echo 'Nieznajomy, podaj swoje imię!';
else
  echo htmlentities($name) . ', Nie znam Cię!';
// zamknięcie elementu <response>
echo '</response>';
?>

Pozdrawiam.

 

 
 
Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie