Aja j x a x v v P H P P

Podobné dokumenty
Ajax - úvod. Klíčové pojmy: Ajax, skriptování na straně klienta a serveru, objekt XMLHttpRequest, DOM model.

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

XSLT pomocí JavaScriptu v Mozille (... Opeře a Safari)

Název Live prez Sear enta Maps

Základy HTML, URL, HTTP, druhy skriptování, formuláře

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Programování v jazyce JavaScript

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Programování v jazyce JavaScript

Tvorba WWW stránek. Mojmír Volf

Programování v jazyce JavaScript

Koláčky, sezení. Martin Klíma

HTML - Úvod. Zpracoval: Petr Lasák

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

AJAX. 1 Prvky AJAXu. 2 DOM model na klientovi. 3 Techniky založené na JavaScriptu

Internet cvičení. ZS 2009/10, Cvičení 4., PHP. Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

AJAX. Dynamické změny obsahu stránek

PŘEHLED A MOŽNOSTI VYUŽITÍ WEBOVÝCH MAPOVÝCH SLUŽEB

WWW a HTML. Základní pojmy. Ivo Peterka

Programování v jazyce JavaScript

Uspořádání klient-server. Standardy pro Web

Programování v jazyce JavaScript

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Formuláře. Internetové publikování. Formuláře - příklad

NSWI096 - INTERNET JavaScript

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

NSWI096 - INTERNET. Úvod do HTML

Programování v jazyce JavaScript

X36WWW. Vícevrstvá architektura webové aplikace Martin Klíma. Tvorba Webu 2 1

NSWI142 Webové aplikace Zkouškový test

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Programování v jazyce JavaScript

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Vytváříme aplikace využívající Ajax

Použití databází na Webu

!!Via!AUREA,!s.r.o.!

Vývoj Internetových Aplikací

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

MBI - technologická realizace modelu

Programování v jazyce JavaScript

HTML Hypertext Markup Language

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

HTML stránka vložení obrázku

Úvod do aplikací internetu a přehled možností při tvorbě webu

BI-AWD. Administrace Webového a Databázového serveru Virtualizace HTTP serveru

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Testování webových aplikací Seznam.cz

WWW technologie. HTTP protokol

HTML stránka odkaz, zvýraznění textu

Instalace a konfigurace web serveru. WA1 Martin Klíma

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Content Security Policy

language="javascript">... </script>.

Po stisku Next se nám objeví seznam dostupných tříd (naše zkompilovaná třída User.KBI), viz následující obrázek.

Reaktivní programování v.net

Základy (X)HTML. WWW stránka WWW stránka dokument (soubor) s informacemi a pokyny pro jejich zobrazení

INFORMAČNÍ SYSTÉMY NA WEBU

Tvorba internetových aplikací pomocí Rich Internet Application AJAX

PHP a Large Objecty v PostgreSQL

Webové Aplikace (6. přednáška)


Web Services na SOAP

Vývoj Internetových Aplikací

(X)HTML, CSS a jquery

Úvod do tvorby internetových aplikací

RESTful API TAMZ 1. Cvičení 11

jquery - úvod Zdroj: Jiří Zralý:

Návrh a tvorba WWW stránek 1/8. Formuláře

Programování v jazyce JavaScript

Rezervační systém Tvorba WWW stránek

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

Pear - hruška Systém pro implementaci a distribuci znovupoužitelných komponent (v PHP) Strukturovaná knihovna open-source (PHP) skriptů Systém pro dis

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Skriptování na straně serveru a klienta

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

WAP. Jirka Kosek. IZI228 tvorba webových stránek a aplikací. Poslední modifikace: $Date: 2004/09/30 09:02:59 $ Copyright Jiří Kosek

JavaScript 101. "Trocha života do statických stránek"

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí

Skriptovací jazyky. Obsah

Internet WEB stránky HTML, Hypertext MarkUp Language - nadtextový jazyk - Místo příkazů obsahuje tagy - značky

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Formy komunikace s knihovnami

Michal Augustýn Microsoft Most Valuable Professional

Základy webových aplikací ZWA Přednáška č. 2 HTML. Martin Klíma

TNPW1 Cvičení aneta.bartuskova@uhk.cz

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

1 Webový server, instalace PHP a MySQL 13

Měření konverzí na SROVNAME.CZ návod k nasazení

Tvorba webu. Úvod a základní principy. Martin Urza

Formuláře. Aby nám mohli uživatelé něco hezného napsat třeba co si o nás myslí!

Semestrální práce z DAS2 a WWW

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Sada 1 - PHP. 09. Formuláře

Transkript:

Ajax v PHP Martin Klíma

AJAX co to je? Asynchronous Javascript And XML Webový klient komunikuje s webovým serverem asynchronně. Výsledkem je jen částečná aktualizace stránky Blíží se návrhu klasické desktopové aplikace AJAX není nová technologie Jde o novou aplikaci existující technologie, resp. o rádoby novinku v souvislosti s pojmem Web 2.0

Ajax Příklady: Našeptávače (www.seznam.cz) On-line mapy (mapy.seznam.cz) gmail

AJAX - jak to funguje Klasický web Událost v prohlížeči vyvolá HTTP request Server oblouží dotaz a vrací nová data, např. HTML Klient dekóduje data a nahrazuje jimi celou stránku Ajax Událost v prohlížeči je obsloužena javascriptovým handlerem Je vytvořen HTTP request a v něm předány informace Informace jsou zakódovány v dohodnutém formátu Server obslouží dotaz a vrací data Klient dekóduje data a modifikuje DOM

Ajax jak to funguje II Klasický web Ajax

Implementace Několik různých způsobů implementace, všechny mají následující kroky 1. Otevři asynchronní spojení klient server 2. Pošli dotaz pomocí domluveného protokolu 3. Zpracuj dotaz a manipuluj DOMem

Příklad implementace I Přidávání elementu, pro jehož získání je třeba vygenerovat http request <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script language="javascript" type="text/javascript"> function obrazky () { var obrazek= new Image(400,353); obrazek.src="obrazky/pejsek.jpg"; document.getelementbyid("obr_id").appendchild(obrazek); </script> <title>obrázek</title> </head> <body> <form action=""> <input type="button" value="obrázek" onclick="obrazky();"/> <div id="obr_id"></div> </form> </body> </html> kuk ajax1_img.html

Příklad implementace II Přidávání obrázku je hezké, ale není v tom žádná logika ze serveru Nyní použijeme jiný element, který má také atribut src a který může zužitkovat serverovou logiku Použití elementu SCRIP 1. Javascriptem vyrobíme nový element SCRIPT 2. Přiřadíme mu vlastnost src to způsobí nahrání obsahu scriptu z externího zdroje pokud je zdroj pod naší kontrolou, máme vyhráno 3. Skript přidáme do dokumentu

Příklad implementace II <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ajax pomocí objektu SCRIPT</title> <script type="text/javascript">//<![cdata[ function vyrobdotaz() { var oscript = document.createelement("script"); oscript.src = "skript_generovany_php.php"; document.body.appendchild(oscript); kuk ajax2_script.html function vypishodiny(hodiny_string) { document.getelementbyid("div_hodiny").innerhtml += "<br/>" + hodiny_string; //]]> </script> </head> <body> <form action=""> <input type="button" value="kolik je hodin?" onclick="vyrobdotaz()" /> <div id="div_hodiny"></div> </form> </body> </html> skript_generovany_php.php <?php echo "vypishodiny(\"".date("h:i:s")."\");";?>

Příklad implementace III Všechny moderní prohlížeče mají funkci XMLHttpRequest Bohužel tato funkce je silně závislá na použitém prohlížeči. IE podle verze používá new ActiveXObject("Msxml2.XMLHTTP") new ActiveXObject(" ("Microsoft.XMLHTTP") Mozila a Safari používají new XMLHttpRequest() IceBrowser používá window.createrequest()

Implementace Javascriptu pro IE a Mozilu <script type="text/javascript">//<![cdata[ var xmlhttp=false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional compilation, we can cope with old IE versions. // and security blocked creation of the objects. try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); catch (E) { xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); catch (e) { xmlhttp=false; if (!xmlhttp && window.createrequest) { try { xmlhttp = window.createrequest(); catch (e) { xmlhttp=false;

Implementace - použití function vyrobdotaz() { xmlhttp.open("get", "ajax_hodiny_server.php",true); xmlhttp.onreadystatechange=function() { if (xmlhttp.readystate==4) { vypishodiny(xmlhttp.responsetext); xmlhttp.send(null) Javascript na klientovi Handler události Obsluha události odpovědi serveru function vypishodiny(hodiny_string) { document.getelementbyid("div_hodiny").innerhtml += "<br/>" + hodiny_string; ajax_hodiny_server.php <?php header("expires: Wed, 23 Dec 1980 00:30:00 GMT"); header("last-modified:".gmdate("d, d M Y H:i:s")." GMT"); header("cache-control: no-cache, must-revalidate"); header("pragma: no-cache"); echo date("h:i:s");?>

Formát dat Formát není definován Je třeba sjednotit klientskou a serverovou stranu Klient a server tedy není univerzální Obvykle se používají např.: pole oddělená čárkou serializovaný Javascript (JSON) nějaká XML formát SOAP pole s pevnou velikostí (např. 20 byte)

Nebezpečí AJAXu Asynchronní způsob aktualizace stránky Není zaručeno, za jak dlouhou dobu server odpoví Události NESMÍ mít závislosti možnost deadlocku nebo nečekaného chování Příklad asynchronního problému async_login_request (data) async_get_account_state_request get_account_state předběhl login get_account_state_response (uživatel není zalogován) login_response(ok, jste zalogován)

Ajax a session Stav aplikace je de-facto udržován v prohlížeči Sessions nejsou potřeba to je utopie vše funguje dobře až do okamžiku, než uživatel znovu načte celou stránku (historie, reload, F5)

Jak na to v praxi použijme knihovny SAJAX XAJAX AJAXAC JPSPAN

XAJAX http://xajaxproject.org/ Obsahuje kninovnu JavaScriptu a PHP Jednoduchá manipulace s objekty DOMu pomocí PHP metod Uživatel je odstíněn od implementačních detailů javascriptu

Postup 1. vyrobíme PHP funkci, která bude manipulovat s DOMem 2. manipulace pomocí objektu typu xajaxresponse nad xajaxresponse voláme jednotlivé metody manipulace DOM funkce může mít parametry, ty jsou předány z klienta 2. vyrobíme objekt xajax 3. zaregistrujeme funkci u objektu typu xajax 4. zavoláme xajax->processrequest(); 5. dále následuje iniciální html stránka 6. v sekci head vypíšeme vygenerovaný javascript 7. použijeme serverové funkce podle libosti voláním funkcí v javascriptu

Ukázka Xajax aktuální čas pro jednoduchost vše uložíme do jednoho jediného php skriptu require ('xajax_core/xajax.inc.php'); $xajax = new xajax(); Xajax objekt function aktualnicas() serverová funkce { volatelná axynchrnonně z $cas = date("h:i:s"); javascriptu $objresponse = new xajaxresponse(); $objresponse->append('div_cas', 'innerhtml', "<br/>$cas"); return $objresponse; registrace funkce do ajax objektu pod jmenem // zaregistrujeme funkci aktualnicas aktualnicas $reqaktualnicas =& $xajax->registerfunction('aktualnicas'); $xajax->processrequest(); // zde je inicialni stranka // následuje HTML tránka spuštění obsluhy pozná, zda má obsloužit sync či async způsobem statické html všetně javascript funkcí je na dalším slide

Ukázka Xajax aktuální čas //... pokračování z předchozího slide echo '<?xml version="1.0" encoding="utf-8"?>';?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>xajax aktualni cas</title> <?php $xajax->printjavascript(); javascript generovaný?> PHP knihovnou- </head> <body> <form action=""> <input type="button" onclick='<?php $reqaktualnicas->printscript();?>' value="aktuální čas"/> <div id="div_cas"></div> </form> </body> </html> volání registrované funkce

Ukázka Xajax II - našeptávač Funkce našeptávače Jak uživatel píše do textového políčka, je průběžně na server odesílán obsah tohoto pole Server text zpracuje a odešle seznam relevantních dat Klient reaguje na příjem dat aktualizací nějaké části stránky Uživateli se zdá, že mu server našeptává

Implementace Klient: Textové pole Javascript reakce na událost napsání textu (keyup) Reakce na příjem dat, modifikace DOM Server: Zpracování http request Nalezení relevantních dat Odeslání události

Klient HTML + Javascript v Xajax = view <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html> <head> <title>naseptavac</title> <?php $xajax->printjavascript('./');?> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> <form action=""> <label for="search">začněte psát jméno</label><br/> <input type="text" onkeyup="xajax_whisper(this.value);" name="search" id="search"/> <br/><label for="whisper">nalezená jména</label> <div id="whisperdiv"> <select id="whisper" name="whisperselect"> </select> </div> </form> </body> </html>

Server data z DB = model class Nameday { static function getnameday($like, $limit = 10) { $query = " SELECT svatek1 FROM svatky WHERE svatek1 LIKE ('".addslashes($like)."%') ORDER BY svatek1 LIMIT $limit "; $result = DB::query($query); if (!$result) die ("DB dotaz selhal".mysql_error()); return $result; public static function getnamedayasselect ($like, $name, $id, $limit = 10) { $to_return = "<select name='".htmlspecialchars($name)."' id='".htmlspecialchars($id)."'>"; if (trim($like)!= "") { $result = self::getnameday($like, $limit); while ($row = mysql_fetch_assoc($result)) { $to_return.="<option>".htmlspecialchars($row['svatek1'])."</option>"; $to_return.="</select>"; return $to_return;

Controller Xajax kouzlo require ('xajax_core/xajax.inc.php'); require('autoload.php'); function whisper($text) { $objresponse = new xajaxresponse(); $objresponse->clear("whisperdiv","innerhtml") ->append("whisperdiv","innerhtml", Nameday::getNamedayAsSelect($text,"whisper", "whisper")); return $objresponse; $xajax = new xajax(); // registruji naseptavaci funkci $whisper = $xajax->register(xajax_function, "whisper"); $xajax->processrequest(); include ('naseptavac_view_bez_cekani.php');?>