Ajax – 4. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ajax – 4. lekceAjax – 4. lekce

 

Ajax – 4. lekce

Google       Google       28. 8. 2008       34 139×

V minulém díle jsme letecky probrali XML a naučili jsme se číst dokumenty XML pomocí asynchronního požadavku XHR. V dnešním díle upravíme pouze příklad ze třetí lekce. Rozdíl bude akorát v tom, že dokument XML bude generován serverem, například z dat uložených v MySQL. Ke generování použijme DOM v PHP.

DOM & PHP

V našich interaktivních aplikacích se jistě nespokojíme se statickými daty uloženými na disku. Určitě mnohem praktičtější bude, když server dokument XML bude generovat dynamicky. DOM v PHP slouží pro generování a parsování XML a HTML souborů. Prozatím budeme používat pro stranu serveru jazyk PHP. „Prozatím“ znamená, že v budoucnu budeme používat i ASP.NET.

Tento seriál předpokládá, že máte jisté znalosti PHP5 a OOP stejně jako JavaScriptu a XML. Pokud o PHP5 a OOP slyšíte poprvé, doporučuji přečíst následující stránky:

Jdeme na to

V dnešním díle vytvoříme skoro stejný příklad jako v díle minulém. Rozdíl bude v tom, že XML dokument, který budeme načítat, bude tvořen scriptem na straně serveru dynamicky a data budou uložena v MySQL. Postup bude následující:

  1. Vytvoříme tabulku pomocí phpMyAdmin, která bude obsahovat sloupce: Id(int20), Jmeno(Varchar 100), Pozice(Varchar 100) a nazveme ji zaměstnanci.
    CREATE TABLE `zamestnanci` (
    `id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `jmeno` VARCHAR( 100 ) NOT NULL ,
    `pozice` VARCHAR( 100 ) NOT NULL
    ) ENGINE = MYISAM ;

  2. Tabulku naplníme daty:
    INSERT INTO `zamestnanci` VALUES (99954, 'Petr Laslo', 'Jednatel/reditel');
    INSERT INTO `zamestnanci` VALUES (99955, 'Franta Lukes', 'Jednatel');
    INSERT INTO `zamestnanci` VALUES (99956, 'Albert Einstain', 'Vedouci vedeckeho tymu');
    INSERT INTO `zamestnanci` VALUES (99957, 'Lenka Nova', 'Asistentka reditele firmy');
  3. Otevřeme soubor js.js a upravíme funkci prectiSoubor();. Jak jsem v minulém díle slíbil, dnes použijeme ošetřenou funkci a změníme název souboru, který budeme číst ze serveru:
    function prectiSoubor(){
    if(xhr){
      try{
        xhr.open("POST","zamestnanci.php",true);
        xhr.onreadystatechange = ctiOdpoved;
        xhr.send(null);
      }catch(e){
        alert("Nelze se připojit k serveru:\n" + e.toString());
      }
    }else{
      alert("Funkce \"precitSoubor()\": chybí objekt XMLHttpRequest");
    }
    }
  4. Nyní si vytvoříme soubor zamestnanci.php a vložíme do něj následující obsah:
    <?php
    //připojím se na databázi a vyberu data
    $data = new mysqli("localhost","root","","ajax");
    $sql = "SELECT * FROM zamestnanci ORDER BY id ASC";
    $res = $data->query($sql);
    
    //výstup je XML dokument, proto odešlu správný mime-type
    header("Content-Type: text/xml");
    
    //vytvořím nový XML
    $xml = new DOMDocument("1.0","utf-8");
    //vytvořím kořenový element <zamesntanci>
    $zamestnanci = $xml->createElement("zamestnanci");
    $xml->appendChild($zamestnanci);
    //zde vytvořím element book, do kterého pomocí cyklu načtu data z MySQL
    
    while($zaznam = $res->fetch_object()){
    $zamestnanec = $xml->createElement("zamestnanec");
    //vytvořím element jmeno a vložím do něj data
    $jmeno = $xml->createElement("jmeno");
    $jmenoData = $xml->createTextNode($zaznam ->jmeno);
    $jmeno->appendChild($jmenoData);
    //vytvořím element id a vložím do něj data
    $id = $xml->createElement("id");
    $idData = $xml->createTextNode($zaznam ->id);
    $id->appendChild($idData);
    //vytvořím element pozice a vložím do něj data
    $pozice = $xml->createElement("pozice");
    $poziceData = $xml->createTextNode($zaznam ->pozice);
    $pozice->appendChild($poziceData);
    //jmeno id a pozice jsou potomci zamestnanec
    $zamestnanec->appendChild($jmeno);
    $zamestnanec->appendChild($id);
    $zamestnanec->appendChild($pozice);
    $zamestnanci->appendChild($zamestnanec);
    }
    //uložím XML výstup
    $vystup = $xml->saveXML();
    //zobrazím
    echo $vystup;
    ?>
  5. Máme hotovo, zdrojové kódy dnešní lekce můžete stáhnout zde.

Nyní máme hotové řešení s podporou databáze a dynamické tvorby XML dokumentu ze strany serveru. Script na straně klienta byl vysvětlen v minulé lekci. Nyní se zaměřme na soubor zamestnanci.php, který nám obstarává serverovou část.

Script začíná připojením k databázi MySQL pomocí třídy mysqli).

//připojím se na databázi a vyberu data
$data = new mysqli("localhost","root","","ajax");
$sql = "SELECT * FROM zamestnanci ORDER BY id ASC";
$res = $data->query($sql);

Poté, co se připojíme k databázi, nastavíme výstup na typ text/xml.

//výstup je XML dokument, proto odešlu správný mime-type
header("Content-Type: text/xml");

Nyní přistoupíme k tvorbě samotného dokumentu XML. V PHP tvorba XML začíná vytvořením instance třídy DOMDocument. Jako nepovinné parametry můžeme zadat verzi XML a kódování XML.

//vytvořím nový XML
$xml = new DOMDocument("1.0","utf-8");

Strukturu XML budeme vytvářet pomocí metod createElement, createTextNode a appendChild. Element zamestnaec:

//vytvořím kořenový element zamesntanci
$zamestnanci = $xml->createElement("zamestnanci");
$xml->appendChild($zamestnanci);
//zde vytvořím element book, do kterého pomocí cyklu načtu data z MySQL

while($zaznam = $res->fetch_object()){
$zamestnanec = $xml->createElement("zamestnanec");
//vytvořím element jmeno a vložím do něj data
$jmeno = $xml->createElement("jmeno");
$jmenoData = $xml->createTextNode($zaznam ->jmeno);
$jmeno->appendChild($jmenoData);
//vytvořím element id a vložím do něj data
$id = $xml->createElement("id");
$idData = $xml->createTextNode($zaznam ->id);
$id -> appendChild($idData);
//vytvořím element pozice a vložím do něj data
$pozice = $xml->createElement("pozice");
$poziceData = $xml->createTextNode($zaznam ->pozice);
$pozice->appendChild($poziceData);
//jmeno id a pozice jsou potomci zamestnanec
$zamestnanec->appendChild($jmeno);
$zamestnanec->appendChild($id);
$zamestnanec->appendChild($pozice);
$zamestnanci->appendChild($zamestnanec);
}

Nakonec vše uložíme do proměnné $vystup a vypíšeme na obrazovku.

//uložím XML výstup
$vystup = $xml->saveXML();
//zobrazím
echo $vystup;

Závěr

V dnešním díle jsme použili Ajax k tomu, k čemu se používá, a to k asynchronní komunikaci se serverem. V příštím díle nejspíš navážeme připojením ke vzdálenému serveru, nebo ajaxovým rámcem pro opakování požadavků v určitém intervalu. Nevím, nechte se překvapit :-).

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

4 názory  —  4 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
Student ČVUT FJFI katedry softwarového inženýrství v ekonomii. Mezi jeho zájmy patří programování a sport. Autor má zkušenosti s PHP 5, MySQL, XHTML a CSS. Zajímá se o platformu .NET, jazyk C#, ASP.NET a WPF.
Web    

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý