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

Ajax – 4. lekceAjax – 4. lekce

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Ajax – 4. lekce

Google       Google       28. 8. 2008       32 122×

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.

Reklama
Reklama

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 Open source neznamená „zdarma“

Open source neznamená „zdarma“

Mnoho společností po celém světě, univerzity, vládní organizace a jim podobné dnes používají open source technologie k vytvoření vlastních webových stránek. Tyto technologie se používají čím dál tím více. Jednoduše proto, že je řada poskytovatelů nabízí zcela zdarma. Je to ale opravdu to správné řešení pro všechny? 

Reklama
Reklama
Obrázek ke článku Rádi sledujete obsah streamovacích služeb? Dejte si pozor na pirátské verze Mandaloriana a Netflixu

Rádi sledujete obsah streamovacích služeb? Dejte si pozor na pirátské verze Mandaloriana a Netflixu

Streamovací služby a jejich obsah se v uplynulých měsících těšily velkému zájmu uživatelů, kteří se při pobytu v karanténě chtěli zabavit sledováním filmů a seriálů. Toho bleskově zneužili hackeři, kteří pod názvy oblíbených streamovacích platforem a jejich obsahu maskovali škodlivé soubory. Nejčastěji používali jako návnadu Netflix a seriál The Mandalorian. 

Obrázek ke článku Bionické ruce mění lidem životy. Konference INSPO ukázala nejnovější technologie

Bionické ruce mění lidem životy. Konference INSPO ukázala nejnovější technologie

Bionické myoprotézy rukou jsou ukázkou pokroku, který udělaly za posledních dvacet let technologie pro lidi se zdravotním postižením. Dnešní protézy, které fungují na principu snímání svalových vzorců, umožňují uživatelům operovat s křehkými předměty či provádět úkony složité na kooperaci různých částí těla – ať už jde o hru na hudební nástroje, zavazování tkaniček, nebo třeba pití ze skleničky. Na 20. ročníku konference INSPO se budou zájemci moci naživo seznámit nejen s takzvanou myorukou, ale rovněž s jedním z jejích uživatelů. 

Obrázek ke článku Využití .htaccess na malém webu

Využití .htaccess na malém webu

V dnešní době existuje spoustu cms, které mnohdy ale vůbec nepotřebujeme a stačila by nám pouze základní funkčnost k úpravě url, přesměrování. K tomuto účelu je ideální .htaccess soubor, který nám se všemi těmato úpravami umí pomoct.

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