SlideShare uma empresa Scribd logo
1 de 144
Baixar para ler offline
Dr.SabinBuragawww.purl.org/net/busaco
Dezvoltarea aplicațiilor Web
la nivel de client
{ⵄ}
programare Web
JavaScript în cadrul navigatorului Web
Dr.SabinBuragawww.purl.org/net/busaco
“Solving the problem is more important
than being right.”
Milton Glaser
Dr.SabinBuragawww.purl.org/net/busaco
Cum rulează programele JavaScript
în navigatorul Web?
Dr.SabinBuragawww.purl.org/net/busaco
Majoritatea programelor JavaScript
rulează – sunt interpretate –
în navigatorul Web via un script engine
Dr.SabinBuragawww.purl.org/net/busaco
Majoritatea programelor JavaScript
rulează – sunt interpretate –
în navigatorul Web via un script engine
Chakra (Microsoft)
SpiderMonkey, IonMonkey, Rhino (Mozilla)
V8 (Google, Opera, Node.js)
Dr.SabinBuragawww.purl.org/net/busaco
Cod JavaScript intern vs.
preluat dintr-un fișier extern
<body>
…
<script type="text/javascript">
alert ("Salut, lume!");
</script>
</body>
<script type="text/javascript" src="http://salutari.info/salut.js">
</script>
Dr.SabinBuragawww.purl.org/net/busaco
Remarcă:
în loc de tipul MIME text/javascript
ar putea fi indicat application/javascript
nesuportat de versiuni
IE mai vechi
Dr.SabinBuragawww.purl.org/net/busaco
Un program JavaScript are acces la arborele DOM
(Document Object Model)
corespunzător documentului HTML
specificații ale Consorțiului Web
www.w3.org/DOM/DOMTR
a se revedea cursul
“Tehnologii Web”
Dr.SabinBuragawww.purl.org/net/busaco
<!DOCTYPE html>
<html>
<body>
<p>Tehnologii Web</p>
<div>
<img src="web.png"/>
</div>
</body>
</html>
HTML
HtmlElement
HTML
BodyElement
HTML
ParagraphElement
Text
HTML
DivElement
HTML
ImageElement
Dr.SabinBuragawww.purl.org/net/busaco
Un program JavaScript are acces la arborele DOM
(Document Object Model)
corespunzător documentului HTML
minimal, navigatorul Web implementează
recomandarea DOM Level 2 HTML (2003)
www.w3.org/TR/DOM-Level-2-HTML
Dr.SabinBuragawww.purl.org/net/busaco
De asemenea, programele JavaScript au acces
la diverse obiecte oferite de mediul de execuție
pus la dispoziție de browser
e.g., informații privind contextul rulării
(caracteristici ale navigatorului, latența rețelei),
istoricul navigării, fereastra de redare a conținutului,
transfer (a)sincron de date,…
Dr.SabinBuragawww.purl.org/net/busaco
Arborele DOM asociat documentului (X)HTML
poate fi accesat/alterat via obiectul document
instanță a clasei implementând interfața HTMLDocument
Dr.SabinBuragawww.purl.org/net/busaco
interface HTMLDocument : Document {
attribute DOMString title; // titlul documentului
readonly attribute DOMString referrer; // adresa resursei ce referă pagina
readonly attribute DOMString domain; // domeniul de care aparține
readonly attribute DOMString URL; // URL-ul absolut al documentului
attribute HTMLElement body; // acces la elementul <body>
readonly attribute HTMLCollection images; // lista tuturor imaginilor
readonly attribute HTMLCollection links; // lista tuturor legăturilor
readonly attribute HTMLCollection forms; // lista tuturor formularelor
attribute DOMString cookie; // acces la cookie-uri
// emite o excepție dacă e asignată o valoare
void open (); // deschide un flux de scriere (alterează DOM-ul curent)
void close (); // închide fluxul de scriere și forțează redarea conținutului
void write (in DOMString text); // scrie un șir de caract. (e.g., cod HTML)
void writeln (in DOMString text); // idem, dar inserează și new line
NodeList getElementsByName (in DOMString numeElement);
// furnizează o listă de elemente conform unui nume de tag
};
interfață specificată în limbajul declarativ WebIDL
Dr.SabinBuragawww.purl.org/net/busaco
Deoarece interfața HTMLDocument
extinde Document,
putem recurge la funcționalitățile
stipulate de specificația DOM generală
Dr.SabinBuragawww.purl.org/net/busaco
Proprietatea documentElement
desemnează nodul-rădăcină
Dr.SabinBuragawww.purl.org/net/busaco
getElementById (identificator)
furnizează un element – nod de tip Element –
conform identificatorului său unic, desemnat de valoarea
atributului id specificat în cadrul documentului
Dr.SabinBuragawww.purl.org/net/busaco
parentNode
oferă acces la numele nodului-părinte al nodului curent
Dr.SabinBuragawww.purl.org/net/busaco
nextSibling
acces la următorul nod de pe același nivel al arborelui
Dr.SabinBuragawww.purl.org/net/busaco
previousSibling
acces la nodul precedent de pe același nivel al arborelui
Dr.SabinBuragawww.purl.org/net/busaco
childNodes
proprietate furnizând într-un tablou
numele nodurilor-copil ale nodului curent
Dr.SabinBuragawww.purl.org/net/busaco
firstChild
desemnează primul nod-copil al nodului curent
Dr.SabinBuragawww.purl.org/net/busaco
lastChild
specifică ultimul nod-copil al nodului curent
Dr.SabinBuragawww.purl.org/net/busaco
attributes
reprezintă tabloul asociativ
conținând atributele asociate unui nod de tip Element
Dr.SabinBuragawww.purl.org/net/busaco
function topLevelNodeAt (nod, top) {
while (nod && nod.parentNode != top)
nod = nod.parentNode;
return nod;
}
function topLevelNodeBefore (nod, top) {
while (!nod.previousSibling && nod.parentNode != top)
nod = nod.parentNode;
return topLevelNodeAt (nod.previousSibling, top);
}
discuție
Ce rol au cele două funcții?
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLElement o extinde
pe cea generală oferită de DOM Level 2
fiecare element HTML specific derivă din ea
Dr.SabinBuragawww.purl.org/net/busaco
// un element HTML generic
interface HTMLElement : Element {
attribute DOMString id; // identificator asociat elementului
attribute DOMString title; // titlu explicativ
attribute DOMString lang; // limba în care e redactat conținutul
attribute DOMString className; // numele clasei CSS folosite pentru redare
};
// specifică un formular Web
interface HTMLFormElement : HTMLElement {
readonly attribute HTMLCollection elements; // elementele HTML incluse în formular
readonly attribute long length; // numărul câmpurilor formularului
attribute DOMString action; // URI-ul resursei ce procesează datele
attribute DOMString enctype; // tipul MIME de codificare a datelor
// (e.g., application/x-www-form-urlencoded)
attribute DOMString method; // metoda HTTP folosită: GET, POST
void submit(); // trimite date URI-ului definit de ‘action’
};
// o imagine (conținut grafic raster)
interface HTMLImageElement : HTMLElement {
attribute DOMString alt; // text alternativ descriind conținutul grafic
attribute DOMString src; // URI-ul resursei grafice
};
Dr.SabinBuragawww.purl.org/net/busaco
Interfața HTMLCollection modelează o listă de noduri
un nod poate fi accesat folosind un index numeric
sau pe baza unui identificator (e.g., stabilit via atributul id)
interface HTMLCollection {
readonly attribute unsigned long length; // oferă lungimea listei
Node item (in unsigned long index); // oferă un nod via un index numeric
Node namedItem (in DOMString name); // furnizează un nod pe baza numelui
};
Dr.SabinBuragawww.purl.org/net/busaco
Cum putem afla/modifica diverse informații
privind nodurile arborelui DOM?
Dr.SabinBuragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
nodeType
proprietate care furnizează tipul unui nod
ELEMENT_NODE (1) = element
TEXT_NODE (3) = conținut text
COMMENT_NODE (8) = comentariu
…
Dr.SabinBuragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
nodeValue
proprietate oferind valoarea unui nod
Dr.SabinBuragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
innerHTML
proprietate – mutabilă – ce furnizează codul (X)HTML
din cadrul unui nod de tip Element
utilizare
nerecomandabilă
Dr.SabinBuragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
textContent
proprietate ce furnizează/stabilește conținutul textual
al nodului și posibililor descendenți
Dr.SabinBuragawww.purl.org/net/busaco
Informații referitoare la nodurile arborelui DOM
getAttribute (numeAtribut)
metodă care oferă acces la valoarea unui atribut
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
createElement (element)
creează un nod de tip Element
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
createTextNode (nod)
creează un nod cu conținut textual
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
appendChild (nod)
adaugă un nod-copil nodului curent
Dr.SabinBuragawww.purl.org/net/busaco
// funcție care generează un număr de elemente HTML
// pe care le adaugă elementului identificat prin 'identificator'
function genereazaElemente (numarElem, numeElem, identificator) {
for (var it = 0; it < numarElem; it++) {
// creăm un element specific
var element = document.createElement (numeElem);
// ...și-i atașăm un nod text
var text = document.createTextNode ("Salut, lumea...");
element.appendChild (text);
// adăugăm nodul creat
document.getElementById (identificator).appendChild (element);
}
}
genereazaElemente (3, "div", "continut"); // 3 <div>-uri
genereazaElemente (2, "p", "lumi"); // 2 paragrafe (<p>)
<div id="lumi"></div>
<h1 id="continut"></h1> a se studia exemplele
din arhivă
Dr.SabinBuragawww.purl.org/net/busaco
consultarea arborelui DOM via extensia Firebug
inspectarea valorilor
proprietăților DOM
arborele DOM corespunzător
codului HTML
generat prin program
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
removeChild (nod)
elimină un nod-copil
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
cloneChild ()
„clonează” un nod al arborelui
Dr.SabinBuragawww.purl.org/net/busaco
Modificarea structurii arborelui DOM
setAttribute (atribut, valoare)
stabilește valoarea unui atribut
Dr.SabinBuragawww.purl.org/net/busaco
generarea dinamică
a unui formular Web
http://jsfiddle.net/busaco/0wvn3fha/
recurgerea la
createElement()
appendChild()
getElementById()
JS Fiddle
Dr.SabinBuragawww.purl.org/net/busaco
Găsirea de noduri via selectori CSS
Selectors API
recomandare W3C (februarie 2013)
www.w3.org/TR/selectors-api/
Dr.SabinBuragawww.purl.org/net/busaco
Găsirea de noduri via selectori CSS
querySelector (selectori)
furnizează primul element – folosind traversarea
în adâncime în preordine – care se potrivește grupului
de selectori (deliminați de virgulă)
querySelectorAll (selectori)
oferă lista de tip NodeList a tuturor elementelor găsite
Dr.SabinBuragawww.purl.org/net/busaco
exemplificare – folosim consola oferită de browser:
document.querySelectorAll ("section[id^="week"]:nth-child(even) > h2");
selectori
CSS3
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
eveniment = acțiune produsă în cadrul mediului de
execuție în urma căreia programul va putea reacționa
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
codul JavaScript invocat la apariția unui eveniment
va putea fi încapsulat într-o funcție de tratare a acestuia
(handler)
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
tradițional, se atașează cod JavaScript ce va fi executat
la apariția unui eveniment de bază
(e.g., onclick, onmouseover, onchange, onload, onkeypress,…)
asupra unui element
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
<button onclick="alert ('Au!');">Apasă-mă!</button>
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
<button onclick="alert ('Au!');">Apasă-mă!</button>
pentru a inhiba execuția acțiunii implicite,
codul JavaScript va trebui să întoarcă false
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
<button onclick="alert ('Au!');">Apasă-mă!</button>

document.getElementById ("identificator").onclick
= trateazaClick; // mai ‘evoluat’ via DOM 1
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
tratarea standardizată a evenimentelor:
specificația DOM Level 2 Events
www.w3.org/TR/DOM-Level-2-Events/
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
specificarea de activități executate
la apariția unui eveniment
obiect.addEventListener ("eveniment", funcție, mod);
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
descrierea arborescentă a fluxului de evenimente
capture versus bubble
Dr.SabinBuragawww.purl.org/net/busaco
fluxul de evenimente (T. Leithead et al., 2012)
a se studia și W. Page, An Introduction to DOM Events (2013)
http://coding.smashingmagazine.com/2013/11/12/an-introduction-to-dom-events/
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
descrierea arborescentă a fluxului de evenimente
mod = true
se încearcă tratarea evenimentului pornind
de la rădăcină până la obiectul-țintă – capture phase
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
descrierea arborescentă a fluxului de evenimente
mod = false
se încearcă tratarea evenimentului atunci când
evenimentul e propagat de la obiectul unde a survenit
până la entitățile superioare lui – bubbling phase
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
se va utiliza un set standard de evenimente
e.g., de control al interacțiunii cu utilizatorul
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți asociate evenimentelor
privind acțiunile mouse-ului
click, mousedown, mouseup, mouseover,
mousemove, mouseout
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți asociate evenimentelor
privind acțiunile mouse-ului
button – butonul acționat (0=stâng, 1=median, 2=drept)
detail – numărul de apăsări ale butonului
clientX – coordonata orizontală a poziției mouse-ului
clientY – coordonata verticală a poziției mouse-ului
Dr.SabinBuragawww.purl.org/net/busaco
interface MouseEvent : UIEvent {
readonly attribute long screenX, screenY; // coordonate relative la ecran
readonly attribute long clientX, clientY; // coordonate relative la zona de redare
readonly attribute boolean ctrlKey, shiftKey, altKey, metaKey; // taste speciale utilizate?
readonly attribute unsigned short button; // indică butonul acționat
readonly attribute EventTarget relatedTarget;
void initMouseEvent (in DOMString typeArg, // inițializează evenimentul de tratare
in boolean canBubbleArg,
in boolean cancelableArg,
in views::AbstractView viewArg,
in long detailArg,
in long screenXArg,
in long screenYArg,
in long clientXArg,
in long clientYArg,
in boolean ctrlKeyArg,
in boolean altKeyArg,
in boolean shiftKeyArg,
in boolean metaKeyArg,
in unsigned short buttonArg,
in EventTarget relatedTargetArg);
};
detalii la www.w3.org/TR/DOM-Level-2-Events/events.html
argumente specifice
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți asociate evenimentelor vizând tastatura
keyup, keydown, keypress
charCode – codul caracterului asociat tastei acționate
keyCode – codul tastei acționate
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
interacțiuni tactile – touch events
recomandare a Consorțiului Web (octombrie 2013)
www.w3.org/TR/touch-events/
Dr.SabinBuragawww.purl.org/net/busaco
interface Touch { // specifică zona tactilă
readonly attribute long identifier;
readonly attribute EventTarget target;
readonly attribute long screenX;
readonly attribute long screenY;
readonly attribute long clientX;
readonly attribute long clientY;
readonly attribute long pageX;
readonly attribute long pageY;
};
interface TouchList { // definește lista punctelor de contact pentru un eveniment tactil
readonly attribute unsigned long length;
getter Touch? item (unsigned long index);
};
interface TouchEvent : UIEvent {
readonly attribute TouchList touches;
readonly attribute TouchList targetTouches;
readonly attribute TouchList changedTouches;
readonly attribute boolean altKey;
readonly attribute boolean metaKey;
readonly attribute boolean ctrlKey;
readonly attribute boolean shiftKey;
};
pot fi tratate
evenimentele
touchstart
touchend
touchmove
touchcancel
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
evenimente referitoare la interacțiunea cu browser-ul
load, unload, select, change, submit, focus, blur, resize, scroll
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
evenimente privitoare la modificarea arborelui DOM
(mutation events)
DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved,
DOMAttrModified, DOMCharacterDataModified,
DOMNodeInsertedIntoDocument,
DOMNodeRemovedFromDocument
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
evenimente privitoare la modificarea arborelui DOM
(mutation events)
în prezent, acestea sunt considerate învechite
alternativă: recurgerea la MutationObserver (DOM 4)
http://www.w3.org/TR/dom/#mutation-observers
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
type
specifică tipul evenimentului ca șir de caractere
e.g., "click", "load", "scroll", "submit"
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
target
desemnează nodul
asupra căruia evenimentul a fost declanșat inițial
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
currentTarget
indică nodul care tratează evenimentul
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
bubbles
indică dacă evenimentul se propagă
spre elemente ascendente (valoarea true)
ori către descendenți (valoarea false)
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
bubbles
e.g., evenimentele abort, error, select, submit, resize, scroll,
click, mousedown, mouseover, mousemove, mouseout,
touchstart, touchend pot avea bubbles = true
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
bubbles
în cazul evenimentelor focus, blur, load, unload,
proprietatea bubbles are valoarea false
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
cancelable
precizează dacă evenimentul poate fi întrerupt
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
cancelable
de exemplu, pentru evenimentele load, unload, abort, error,
select, focus, blur, resize, scroll, touchcancel
proprietatea cancelable este setată ca fiind false
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
proprietăți utile ale obiectului Event
cancelable
pentru evenimente precum click, mousedown, mouseup,
mouseover, mousemove, mouseout, touchstart, touchend,
touchmove proprietatea cancelable poate fi true
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
eliminarea tratării unui eveniment
removeEventListener ()
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
ignorarea comportamentului implicit
preventDefault ()
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
comportamentul implicit pentru evenimentul tactil
touchend poate varia în funcție de context/platformă:
mousemove, mousedown, mouseup, click
Dr.SabinBuragawww.purl.org/net/busaco
Răspunsul la evenimente
trimiterea evenimentului să poată fi procesat
conform modelului oferit de implementare
dispatchEvent ()
Dr.SabinBuragawww.purl.org/net/busaco
Remarcă:
unele navigatoare acceptă tratarea unor evenimente
nestandardizate (încă) de Consorțiul Web
exemple:
editarea datelor – cut, copy, paste
Dr.SabinBuragawww.purl.org/net/busaco
Remarcă:
anumite evenimente sunt specificate în cadrul HTML5
conectivitatea la rețea: online, offline
interacțiunea cu utilizatorul: redo, undo, drag, drop,
mousewheel, contextmenu, pagehide, pageshow,…
starea dispozitivului – deviceorientation, devicemotion
utilizarea imprimantei – beforeprint, afterprint
…și altele
Dr.SabinBuragawww.purl.org/net/busaco
studiu de caz (Ondřej Žára, 2013)
calcul tabelar în
30 de linii JavaScript
jsfiddle.net/ondras/hYfN3/
Dr.SabinBuragawww.purl.org/net/busaco
for (var i = 0; i < 6; i++) { // construim tabelul cu câmpuri de intrare
var row = document.querySelector ("table").insertRow (-1); // adăugăm un rând la tabel
for (var j = 0; j < 6; j++) {
var letter = String.fromCharCode ("A".charCodeAt (0) + j - 1);
row.insertCell (-1).innerHTML = i && j ? "<input id='" + letter + i + "'/>" : i || letter;
}
}
var DATA={}, INPUTS=[].slice.call (document.querySelectorAll ("input"));
INPUTS.forEach ( function(elm) { // pentru fiecare element <input>, procesăm valoarea
elm.onfocus = function (e) { e.target.value = localStorage[e.target.id] || ""; };
elm.onblur = function (e) { localStorage[e.target.id] = e.target.value; computeAll(); };
var getter = function () { // funcție de furnizare a valorii (deja stocată în localStorage)
var value = localStorage[elm.id] || "";
if (value.charAt(0) == "=") { // începe cu =, deci e o formulă care va fi evaluată
with (DATA) return eval (value.substring(1));
} else { return isNaN (parseFloat (value)) ? value : parseFloat (value); }
};
Object.defineProperty (DATA, elm.id, { get: getter });
Object.defineProperty (DATA, elm.id.toLowerCase(), { get: getter });
} );
( window.computeAll = function () {
INPUTS.forEach (function (elm) { try { elm.value = DATA[elm.id]; } catch(e) {} });
} )();
Dr.SabinBuragawww.purl.org/net/busaco
În ce mod are loc transferul asincron
între aplicațiile de pe server și documentul Web?
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
permite transfer asincron de date
între client (browser) și serverul Web
a se revizita cursul
“Tehnologii Web”
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
suită de tehnologii deschise
limbaje standardizate de structurare – e.g., (X)HTML –
și de prezentare a datelor: CSS
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
suită de tehnologii deschise
redare + interacțiune la nivel de client Web
via standardul DOM
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
suită de tehnologii deschise
interschimb și manipulare de date reprezentate prin:
diverse dialecte XML,
JSON (JavaScript Object Notation),
HTML,
alte formate
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
suită de tehnologii deschise
transfer (a)sincron de date
facilitat de obiectul XMLHttpRequest
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
suită de tehnologii deschise
procesare folosind limbajul ECMAScript (JavaScript)
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
disponibil la nivel de navigator Web via JavaScript
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
specificația inițială bazată pe implementarea MSIE
oferită în prezent de aproape orice browser
www.w3.org/TR/XMLHttpRequest1/
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
specificația actuală – W3C Working Draft (ianuarie 2014)
implementată de navigatoarele recente
www.w3.org/TR/XMLHttpRequest/
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
permite realizarea de cereri HTTP – e.g., GET, POST,… –
dintr-un program rulând la nivel de client (browser)
spre o aplicație / un serviciu Web existent(ă) pe server,
în mod asincron ori sincron
Dr.SabinBuragawww.purl.org/net/busaco
interface XMLHttpRequest : XMLHttpRequestEventTarget {
attribute Function? onreadystatechange;
// funcția de tratare a evenimentului de schimbare a stării transferului
readonly attribute unsigned short readyState; // starea transferului
// realizarea unei cereri HTTP
void open (DOMString metoda, DOMString url, optional boolean asinc = true,
optional DOMString? cont, optional DOMString? parola); // deschide conex.
void setRequestHeader (DOMString campAntet, DOMString valoare);
// stabilește antetul HTTP
void send (optional data = null); // trimite date spre serverul Web
void abort (); // abandonează transferul
// receptarea răspunsului de la serverul Web
readonly attribute unsigned short status; // codul de stare HTTP: 200, 303, 400,…
readonly attribute DOMString statusText; // textul asociat codului de stare
DOMString? getResponseHeader (DOMString antet); // preia antetul HTTP
DOMString getAllResponseHeaders (); // preia toate câmpurile răspunsului
readonly attribute any response; // conține răspunsul propriu-zis
readonly attribute DOMString responseText; // conține răspunsul: format text
readonly attribute Document? responseXML; // stochează răspunsul: date XML
};
Dr.SabinBuragawww.purl.org/net/busaco
interface XMLHttpRequestEventTarget : EventTarget {
// funcții de tratare a evenimentelor asociate transferului asincron
attribute Function? onloadstart; // transferul a început
attribute Function? onprogress; // se realizează transferul datelor…
attribute Function? onabort; // s-a abandonat transferul de date
attribute Function? onerror; // a apărut o eroare de transmisie
attribute Function? onload; // datele au fost recepționate de client
attribute Function? ontimeout; // a apărut o întârziere de transfer
attribute Function? onloadend; // transferul s-a terminat
};
// constante ce specifică starea transferului (vezi proprietatea readyState)
const unsigned short UNSENT = 0; // încă n-au fost efectuate transferuri
const unsigned short OPENED = 1; // s-a deschis conexiunea cu serverul
const unsigned short HEADERS_RECEIVED = 2; // primire câmpuri-antet HTTP
const unsigned short LOADING = 3; // datele se încarcă
const unsigned short DONE = 4; // gata! (transfer efectuat complet)
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
open ( )
inițiază – deschide – o conexiune HTTP cu serverul,
emițând o cerere: GET, POST,…
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
send ( )
transmite (asincron) date – e.g., XML, JSON etc. –,
spre aplicația/serviciul ce rulează pe server
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
send ( )
orice listener (asociat evenimentelor onload, ontimeout,
onabort,…) trebuie stabilit înainte de a trimite date
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
abort ( )
abandonează transferul de date curent
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
setRequestHeader ( )
specifică anumite câmpuri de antet HTTP
exemple: Cookie, Keep-Alive, User-Agent,…
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
getResponseHeader ( )
furnizează un anumit câmp prezent
în antetul mesajului de răspuns HTTP trimis de server
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
getAllResponseHeaders ( )
oferă toate câmpurile HTTP trimise de server,
exceptând Set-Cookie
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
readyState
furnizează codul de stare a transferului:
0 – UNSENT, 1 – OPENED,
2 – HEADERS_RECEIVED, 3 – LOADING, 4 – DONE
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
status
oferă codul de stare HTTP întors de serverul Web:
200 (Ok), 404 (Not Found), 500 (Internal Server Error),…
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
statusText
conține mesajul corespunzător codului de stare HTTP
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
responseText
responseXML
conțin răspunsul (datele) obținut(e) de la server
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
onreadystatechange
specifică funcția ce va fi invocată la modificările de stare
ale transferului de date dintre server și client
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
obiectul XMLHttpRequest
excepții specifice care pot fi emise (conform DOM 4 Core)
AbortError InvalidAccessError InvalidStateError
NetworkError SecurityError TimeoutError
…
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
noutăți:
stabilirea unui timeout privind realizarea unei cereri
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
noutăți:
datele vehiculate pot fi de mai multe tipuri
(ArrayBuffer, Blob, Document, DOMString, FormData)
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
noutăți:
procesul de transmitere a datelor spre server (upload)
poate avea asociat un handler specific
via proprietatea upload
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
noutăți:
utilizând constructorul AnonXMLHttpRequest,
transferurile sunt considerate „anonime”
(i.e., nu se trimit cookie-uri, anteturi de autentificare,…)
Dr.SabinBuragawww.purl.org/net/busaco
http://caniuse.com/
verificarea suportului oferit
de browser vizând o tehnologie
Dr.SabinBuragawww.purl.org/net/busaco
Ce alte aspecte trebuie considerate
atunci când se recurge la Ajax?
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
oferirea de alternative la Ajax, atunci când suportul
pentru acesta nu este implementat/activat
graceful degradation
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
minimizarea traficului dintre browser și server
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
transferul de date poate fi monitorizat (+interceptat)
via instrumente dedicate
WireShark
Firebug, Fiddler, TamperData, Live HTTP Headers
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
stabilirea unui mod de interacțiune clar
interacțiune HTML clasică
versus
interacțiune „bogată” cu Ajax
versus
interacțiune la nivelul unei aplicații convenționale
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
adoptarea Ajax pentru creșterea utilizabilității,
nu doar de dragul tehnologiei
exemple negative:
distragerea utilizatorului, abuz de resurse
(e.g., supradimensionarea arborelui DOM)
Dr.SabinBuragawww.purl.org/net/busaco
AJAX – Asynchronous JavaScript And XML
oferă premisele invocării asincrone de servicii Web
în stilul REST
transferul de date se realizeaza via POX (Plain Old XML),
JSON (JavaScript Object Notation),
AHAH (Asynchronous HTML and HTTP)
sau text neformatat
Dr.SabinBuragawww.purl.org/net/busaco
Șabloane de proiectare AJAX
privind programarea:
invocare de servicii Web (RESTful Service, JSON Message)
dialog între browser & server
(Periodic Refresh, Submission Throttling, Cross-Domain Proxy)
asigurarea performanței (Fat Client, Browser-Side Cache,
Guesstimate, Predictive Fetch, Code Compression, On-Demand JS)
popularea arborelui DOM
Dr.SabinBuragawww.purl.org/net/busaco
Șabloane de proiectare AJAX
referitoare la interacțiunea cu utilizatorul:
formulare
(Live Form, Data Grid, Progress Indicator, Suggestion, Slider)
widget-uri de afișare a conținutului
arhitectura informației
funcționalitate (Lazy Registration, Direct Login, Heartbeat,
Autosave, Unique URLs)
Dr.SabinBuragawww.purl.org/net/busaco
Șabloane de proiectare AJAX
inginerie Web:
jurnalizare (e.g., Logging)
depanare
inspecție de cod/date (DOM Inspection, Traffic Sniffing)
vezi și cursul viitor
Dr.SabinBuragawww.purl.org/net/busaco
http://ajaxpatterns.org/Patterns
Dr.SabinBuragawww.purl.org/net/busaco
Comet
termen propus de Alex Russel, 2006
permite ca datele să fie „împinse” (push) de către server
spre aplicația client, utilizând conexiuni HTTP
persistente (long-lived) în vederea reducerii latenței
Dr.SabinBuragawww.purl.org/net/busaco
Comet
șablon de proiectare a aplicațiilor Web
care necesită realizarea de conexiuni persistente,
în stilul peer-to-peer
utilizat de aplicațiile Web intensiv interactive,
eventual colaborative – e.g., Google Docs, Mibbit,…
Dr.SabinBuragawww.purl.org/net/busaco
Comet
complementar Ajax
long polling
HTTP server push
Reverse Ajax
http://ajaxpatterns.org/HTTP_Streaming
Dr.SabinBuragawww.purl.org/net/busaco
implementare: HTTP long polling sau HTTP streaming
de studiat M. Carbou, “Reverse Ajax,
Part 1: Introduction to Comet”, IBM developerWorks, 2011
http://www.ibm.com/developerworks/web/library/wa-reverseajax1/
Dr.SabinBuragawww.purl.org/net/busaco
Comet
instrumente software – exemplificări:
Atmosphere, DWR, Ice Faces, Jetty, Orbited
în contextul JavaScript, un exemplu notabil este
APE (Ajax Push Engine)
www.ape-project.org
Dr.SabinBuragawww.purl.org/net/busaco
Ajax/Comet oferă suport pentru dezvoltarea de
aplicații Web hibride – mash-ups
combinarea – în contextul nostru, la nivel de client –
a conținutului ce provine din surse (situri)
multiple, oferind o funcționalitate/experiență nouă
Dr.SabinBuragawww.purl.org/net/busaco
Aplicații mash-up
se bazează pe fluxuri RSS/Atom,
servicii Web, API-uri publice,…
„curentul” SaaS (Software As A Service)
Dr.SabinBuragawww.purl.org/net/busaco
Surse de date
(data feeds)
Atom, RSS, geoRSS,
microdate HTML5, RDFa,…
Interfețe de programare
(API-uri)
specifice serviciilor publice
și de procesare JSON/XML
Biblioteci/framework-uri
pentru dezvoltare
framework-uri Web generice
sau oferite de organizații
Instrumente interactive
(Web tools)
eventual, disponibile în cloud
e.g., Yahoo! Pipes
Platforme
(Platform As A Service)
Heroku, Google App Engine,
Nodejitsu, Windows Azure,…
Dr.SabinBuragawww.purl.org/net/busaco
o listă a mash-up-urilor existente:
www.programmableweb.com/mashups/directory
Dr.SabinBuragawww.purl.org/net/busaco
Nu există o problemă de securitate
privind accesul la resurse via JavaScript?
Dr.SabinBuragawww.purl.org/net/busaco
Same-Origin Security Policy
stipulează că un program JavaScript trebuie să acceseze
doar datele aparținând aceleași origini
– i.e., provenite din același domeniu Internet –
a script-ului JavaScript
Dr.SabinBuragawww.purl.org/net/busaco
se permit doar transferuri vizând reprezentări de resurse
referitoare la imagini, fișiere CSS
și alte programe JavaScript aparținând aceleași origini
Dr.SabinBuragawww.purl.org/net/busaco
Same-Origin Security Policy
previne cazurile în care un document/program încărcat
dintr-o origine să poată accesa/modifica proprietăți
ale unui document aparținând altei origini
https://developer.mozilla.org/Web/Security/Same-origin_policy
Dr.SabinBuragawww.purl.org/net/busaco
interactiune web: ajax – studiu de cazvar url = "http://profs.info.uaic.ro/~busaco/teach/courses/web/web-film";
// realizăm o cerere HEAD pentru a obține meta-date despre o resursă
var client = new XMLHttpRequest ();
client.open ("HEAD", url, true);
client.send ();
client.onreadystatechange = function () {
// am recepționat câmpurile-antet?
if (client.readyState == 2) {
// semnalăm tipul MIME și data ultimei actualizări
alert ("Resursa de tip '" +
client.getResponseHeader ("Content-Type") + "' s-a actualizat la " +
client.getResponseHeader ("Last-Modified"));
}
}
preluarea în mod asincron
via HEAD a unor meta-date
Dr.SabinBuragawww.purl.org/net/busaco
URL al altui domeniueludăm Same Origin Policy
Dr.SabinBuragawww.purl.org/net/busaco
CORS (Cross-Origin Resource Sharing)
recomandare a Consorțiului Web (ianuarie 2014)
http://www.w3.org/TR/cors/
mecanism ce permite partajarea la nivel de client
a resurselor provenind din domenii Internet diferite
astfel, se pot emite cereri via XMLHttpRequest între domenii
Dr.SabinBuragawww.purl.org/net/busaco
Având un mash-up Web la nivel de client
ce utilizează N surse de date provenite din domenii
diferite, la câți arbori DOM are acces
programul JavaScript?
întrebări (pentru acasă)
Transferul datelor
via Comet
este bidirecțional?
De ce?
Dr.SabinBuragawww.purl.org/net/busaco
episodul viitor: ingineria aplicațiilor JavaScript

Mais conteúdo relacionado

Mais procurados

Mais procurados (17)

CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
CLIW 2017-2018 (7/12) JavaScript în navigatorul Web. De la DOM la Ajax şi mas...
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
 
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
CLIW 2014—2015 (11/12): Programare Web. API-uri JavaScript în contextul HTML5
 
Node.js: aspecte esențiale
Node.js: aspecte esențialeNode.js: aspecte esențiale
Node.js: aspecte esențiale
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHPWeb 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
Web 2016 (04/13) Programare Web – Dezvoltarea aplicațiilor Web în PHP
 
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
CLIW 2015-2016 (6/13) (Re)găsirea resurselor Web. De la motoare de căutare și...
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #12): Programare Web....
 
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object ModelWeb 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
Web 2016 (08/13) Procesarea datelor XML & HTML. Document Object Model
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma REST
 
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.jsWeb 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
Web 2016 (05/13) Programare Web – Dezvoltarea aplicațiilor Web via Node.js
 
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
WADe 2017-2018 Tutorial (1/3): Web Application Development with Node.js – An ...
 
CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)
CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)
CLIW 2017-2018 (10/12) Programare Web. API-uri JavaScript în contextul HTML5 (I)
 

Destaque

Andre moreau psihoterapie metode si tehnici
Andre moreau   psihoterapie metode si tehniciAndre moreau   psihoterapie metode si tehnici
Andre moreau psihoterapie metode si tehnici
Adriana Stoenescu
 
Jean piaget nasterea inteligentei la copil,1973
Jean piaget   nasterea inteligentei la copil,1973Jean piaget   nasterea inteligentei la copil,1973
Jean piaget nasterea inteligentei la copil,1973
cipyn73
 
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicativeIolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
stipcovicimaria
 
Jean piaget construirea realului la copil
Jean piaget   construirea realului la copilJean piaget   construirea realului la copil
Jean piaget construirea realului la copil
cipyn73
 
Constantin enachescu tratat de psihanaliza si psihoterapie
Constantin enachescu   tratat de psihanaliza si psihoterapieConstantin enachescu   tratat de psihanaliza si psihoterapie
Constantin enachescu tratat de psihanaliza si psihoterapie
Loredana - Mihaela Falat
 
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
exodumuser
 

Destaque (11)

Tratat De Memeologie V2.0
Tratat De Memeologie V2.0Tratat De Memeologie V2.0
Tratat De Memeologie V2.0
 
Tratat de Psihotraumatologie Fischer , Riedesser
Tratat de Psihotraumatologie Fischer , RiedesserTratat de Psihotraumatologie Fischer , Riedesser
Tratat de Psihotraumatologie Fischer , Riedesser
 
Andre moreau psihoterapie metode si tehnici
Andre moreau   psihoterapie metode si tehniciAndre moreau   psihoterapie metode si tehnici
Andre moreau psihoterapie metode si tehnici
 
123798637 terapia-sistemica-de-familie
123798637 terapia-sistemica-de-familie123798637 terapia-sistemica-de-familie
123798637 terapia-sistemica-de-familie
 
Jean piaget nasterea inteligentei la copil,1973
Jean piaget   nasterea inteligentei la copil,1973Jean piaget   nasterea inteligentei la copil,1973
Jean piaget nasterea inteligentei la copil,1973
 
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicativeIolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
Iolanda mitrofan-psihoterapie-repere-teoretice-metodologice-si-aplicative
 
Daniel david interventie cognitiv-comportamental in tulburari psihice
Daniel david    interventie cognitiv-comportamental  in tulburari psihiceDaniel david    interventie cognitiv-comportamental  in tulburari psihice
Daniel david interventie cognitiv-comportamental in tulburari psihice
 
Jean piaget construirea realului la copil
Jean piaget   construirea realului la copilJean piaget   construirea realului la copil
Jean piaget construirea realului la copil
 
Constantin enachescu tratat de psihanaliza si psihoterapie
Constantin enachescu   tratat de psihanaliza si psihoterapieConstantin enachescu   tratat de psihanaliza si psihoterapie
Constantin enachescu tratat de psihanaliza si psihoterapie
 
Metode si tehnici de solutionare a conflictelor
Metode si tehnici de solutionare a conflictelorMetode si tehnici de solutionare a conflictelor
Metode si tehnici de solutionare a conflictelor
 
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
124788712 tratat-de-drept-penal-partea-generală-vol-i-florin-streteanu-2008
 

Semelhante a CLIW 2014—2015 (8/12): JavaScript în navigatorul Web

3173119 aplicatii-de-retea
3173119 aplicatii-de-retea3173119 aplicatii-de-retea
3173119 aplicatii-de-retea
sorinm10
 
0html introducere
0html introducere0html introducere
0html introducere
Sima Sorin
 
Javascript ajax tutorial
Javascript ajax tutorialJavascript ajax tutorial
Javascript ajax tutorial
Vlad Posea
 

Semelhante a CLIW 2014—2015 (8/12): JavaScript în navigatorul Web (20)

HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
 
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
Web 2016 (12/13) Interacțiune Web cu Ajax. Aplicații Web hibride (mash-up-uri)
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #11): Programare Web....
 
3173119 aplicatii-de-retea
3173119 aplicatii-de-retea3173119 aplicatii-de-retea
3173119 aplicatii-de-retea
 
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
Web 2016 (09/13) Procesarea datelor XML & HTML. Simple API for XML. Procesări...
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #2): Arhitectura navi...
 
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului WebCLIW 2015-2016 (2/13) Arhitectura navigatorului Web
CLIW 2015-2016 (2/13) Arhitectura navigatorului Web
 
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului WebCLIW 2017-2018 (2/12) Arhitectura navigatorului Web
CLIW 2017-2018 (2/12) Arhitectura navigatorului Web
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
0html introducere
0html introducere0html introducere
0html introducere
 
Javascript ajax tutorial
Javascript ajax tutorialJavascript ajax tutorial
Javascript ajax tutorial
 
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului WebCLIW 2014—2015 (2/12): Arhitectura navigatorului Web
CLIW 2014—2015 (2/12): Arhitectura navigatorului Web
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
 
HTML5 în XXX de minute
HTML5 în XXX de minuteHTML5 în XXX de minute
HTML5 în XXX de minute
 
O lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTMLO lectie de anatomie Web. Disectia unui document HTML
O lectie de anatomie Web. Disectia unui document HTML
 
Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5Aplicații Firefox OS cu HTML5
Aplicații Firefox OS cu HTML5
 
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.jsWADe 2014—2015 (supliment): Dezvoltare Web via node.js
WADe 2014—2015 (supliment): Dezvoltare Web via node.js
 
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
CLIW 2014—2015 (10/12): Programare Web. Suita de tehnologii HTML5
 
MuLang
MuLangMuLang
MuLang
 
Programare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatiiProgramare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatii
 

Mais de Sabin Buraga

Mais de Sabin Buraga (20)

Web 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturaleWeb 2020 01/12: World Wide Web – aspecte arhitecturale
Web 2020 01/12: World Wide Web – aspecte arhitecturale
 
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni WebWeb 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
Web 2020 02/12: Programare Web – HTTP. Cookie-uri. Sesiuni Web
 
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de clientSTAW 11/12: Performanţa aplicaţiilor Web la nivel de client
STAW 11/12: Performanţa aplicaţiilor Web la nivel de client
 
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
STAW 12/12: (Re)găsirea resurselor Web. De la motoare de căutare şi SEO la da...
 
Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)Sabin Buraga: Dezvoltator Web?! (2019)
Sabin Buraga: Dezvoltator Web?! (2019)
 
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
HCI 2018 (2/10) Human Factor. From interaction idioms to human capacities & c...
 
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and GuidelinesHCI 2018 (3/10) Design Models, Methodologies and Guidelines
HCI 2018 (3/10) Design Models, Methodologies and Guidelines
 
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual DesignHCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
HCI 2018 (4/10) Information Architecture. From Design Patterns to Visual Design
 
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to FlowHCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
HCI 2018 (5/10) Information Architecture. From Design Patterns to Flow
 

CLIW 2014—2015 (8/12): JavaScript în navigatorul Web