AJAX pro začátečníky: formulář zpracovaný bez opětovného načtení stránky

Současné webové stránky se bez JavaScriptu a dalších technologií provádějících různé operace na pozadí, téměř neobejdou. Postup, kterým můžete dosáhnout zpracování dat bez toho, že by bylo nutné znovu načítat webovou stránku, je založen na sadě technologií souhrnně označovaných jako AJAX. Podívejme se na jednoduchý příklad.

AJAX jako takový není nějaká konkrétní technologie nebo programovací jazyk. Jde o provázání několika prvků, jejichž výsledkem je vždy nějaké zpracování dat či jiná akce, kterou webová aplikace provede bez toho, že by se uživateli v prohlížeči musela stránka znovu načítat.

V naší ukázce si ukážeme úplný základ toho, jak AJAX funguje ve spojení HTML, JavaScriptu a PHP. Pokud pracujete s redakčními systémy, možná už využíváte jQuery a API těchto systémů. O tom někdy příště, tentokrát se zaměříme opravdu na základní fungování této techniky. Myslím si, že znalost základů AJAXu vám může pomoci v pochopení principu jeho fungování například v redakčním systému Drupal.

Cílem následující ukázky bude jednoduchý formulář v HTML, který bude převádět zadaný text do podoby šifry MD5. Teto formulář bude obsahovat tři prvky, a to políčko pro zadání vstupního textu s popiskem a odesílací. Převod bude probíhat bez opětovného načítání stránky, což zajistí JavaScript, samotný výpočet MD5 zrealizujeme pomocí kousku kódu v PHP. Výsledek bude zobrazován v odstavci pod formulářem.

Jak na AJAX 1: připravte si HTML

Formulář v HTML jistě dovedete připravit sami, takže k následujícímu kódu jen stručné vysvětlení. Jako akce nyní ve formuláři uvedena cesta k souboru v PHP nebo na nějakou další stránku. Namísto toho je zde odkaz na funkci JavaScriptu, která je definována v hlavičce webu. Stejně tak by mohla být v externím souboru a do stránky vložena značkou script.

Každý formulářový prvek má své pojmenování a identifikátor. Pod formulářem je mezinadpis následovaný prázdným odstavcem, kterému jsem přidělil identifikátor vysledek.

 <h1>Řetězec pro převod do MD5</h1>
   
<form name="zadani" action="javascript:md5()">
   <label for="string">Zadejte vstupní text:</label>
   <input type="text" name="string" id="string" class="string">
   <input type="submit" name="submit" value="Převést">
</form>


 <h3>MD5 pro zadaný výraz</h3>
 <p id="vysledek"></p>

Jak na AJAX 2: obsluha pomocí JavaScriptu

JavaScriptový kód, který se bude starat o obsluhu zpracování dat, je již o něco delší. Skládá se ze dvou funkcí, a to md5() a zpracuj(). První z funkcí je volána coby akce z HTML formuláře. Do proměnné string do ní přiřadíme obsah políčka ve formuláři. Následuje konstrukce podmínky if, ve které je potřeba ověřit, zda webový prohlížeč podporuje vlastnost XMLHttpRequest, nebo vlastnost ActiveXObject. Druhá jmenovaná se týká Internet Exploreru, s první metodou by vám v něm AJAX nefungoval.

Jestliže jde o jakýkoli jiný prohlížeč, než Internet Explorer, proběhne první část podmínky if, tedy vytvoří se nový objekt http_request voláním new XMLHttpRequest. Pokud uživatel na stránku kouká v Internet Exploreru, opět vytvoříme objekt http_request, ovšem voláním objektu technologie ActiveX.

Ve zbytku funkce md5() již pracujeme s vytvořeným objektem. Nejprve mu sdělíme, že změna jeho stavu bude řízena funkcí zpracuj(), jinými slovy zde říkáme, která funkce zajistí zpracování dat na pozadí. Následně zavoláme skript v PHP. Budeme do něj data odesílat formulářovou metodou POST. Nastavíme hlavičku a skriptu md5.hp odešleme připravená data v podobě proměnné request. Tu jsme na začátku naplnili řetězcem string= následovaným hodnotu z políčka ve formuláři.

JavaScriptová funkce md5() tedy vezme data z formuláře a odešle je skriptu md5.php ke zpracování. (Chcete-li názorněji, při použití metody GET by to odpovídalo zavolání adresy md5.php?string=obsah-policka.).

Funkci zpracuj() volá ta předchozí pro zpracování dat získaných volaným skriptem v PHP. Ten vypíše do svého výstupu nějaký text, v našem případě šifru MD5 pro zadaný řetězec. Ve funkci zpracuj() podmínkami if ošetříme, zda došlo ke zpracování skriptu a zda je zpracování dokončeno v pořádku (návratové kódy HTTP 4 a 200). V takovém případě přebereme výstup z objektu http_request a vložíme jej do HTML elementu s identifikátorem vysledek, tedy do odstavce pod formulářem. Pokud zpracování skončí jiným návratovým kódem, než 200, došlo k chybě a uživateli tak zobrazíme jednoduché hlášení o problému.

  

    function md5() {      
        var http_request = false;
        var string = document.getElementById('string').value;
        var request = "string="+string;

        if (window.XMLHttpRequest) {
            http_request = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            try {
              http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (eror) {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }

        http_request.onreadystatechange = function() { zpracuj(http_request); };
        http_request.open('POST', 'md5.php', true);
        http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        http_request.send(request);
   }

    function zpracuj(http_request) {
        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                document.getElementById('vysledek').innerHTML = http_request.responseText;            
            } else {
                alert('Chyba');
            }
        }
    }
  

Jak na AJAX 3: zpracování pomocí PHP

K dokončení příkladu nám zbývá ještě jednoduchý kód v PHP, který se postará o zpracování předaných dat a o vrácení výsledku. V našem příkladu je velmi jednoduchý. Nejprve ověří, zda byla metodou POST předána hodnota string a pokud ano, zobrazí příkazem echo její podobu v MD5.

<?
if ($_POST['string']){
        echo md5($_POST['string']);
}
?>

Výsledek

Kompletní ukázku jednoduchého zpracování dat pomocí AJAXu najdete níže ke stažení. Soubory nakopírujte do stejného adresáře na server, který podporuje spouštění skriptů v PHP a vyzkoušejte.

Příloha Velikost
ajax.zip 1.07 KB

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Marketing Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru