SlideShare a Scribd company logo
1 of 21
AJAX
Stipe Predanić
AJAX
● Asynchronous JavaScript and XML
● zašto koristiti AJAX?
● Asinkrono
● JavaScript
● XML
– ili zamjene...
Asinkronost
● JavaScript izvršava UI dretvu (jednu!)
● web worker u HTML-u 5 ne radi kroz UI dretvu, ve uć
dodatnim dretvama
● asinkrono slanje dopušta
● slanje i primanje podataka prema/od servera bez
uplitanja u normalan tijek rada JS koda
● kad stigne odgovor – obradi se.
● prednost: brži odziv jer je komunikacija “nevidljiva”
korisniku
● nedostatak: kompleksnost sustava
JavaScript & XML
● JavaScript
● osnovni jezik na webu.
● XML
● eXtensible Markup Language
● služi za razmjenu podataka izme u sustavađ
● u AJAX-u se za razmjena podataka mogu koristiti i
drugi na inič
● isti tekstč
● JSON
Zašto je AJAX popularan?
● Server – klijent arhitektura vs Debeli - tanki
klijenti
● AJAX dopušta debele klijente u web okruženju!
● klijent dobiva
– bolji odaziv i interaktivnost aplikacije
– manje optere enje mrežnih resursa (!?!?)ć
Nije sve tako lijepo
● AJAX aplikacije je
● kompleksnije izvesti
● inicijalno u itavanje aplikacije (uobi ajeno) traječ č
duže
● kompatibilnost izme u browserađ
● sigurnost
Usamljeni otok?
● AJAX nije jedina tehnologija koja nudi (ili je
nudila) ovakve mogu nostić
● FLASH
● SilverLight
● Java appleti
● Mozilla XUL
● i drugi (npr. OpenLaszlo)
Ideja AJAX-a
● napravi zahtjev
● stvaranje XMLHttpRequest (ili sli no)č
● poslati zahtjev poslužitelju
● standardni GET/POST
● obraditi odgovor
● osvježiti HTML dokument
● vlastiti JS kod ili neki od JS frameworka
Izrada zahtjeva
var request = false;
try {
request = new XMLHttpRequest();
} catch (ms) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (ms2) {
request = new
ActiveXObject("Microsoft.XMLHTTP");
}
}
Slanje zahtjeva
● otvori zahtjev (postavi parametre)
● postavi callback funkciju
● pošalji zahtjev
function myAjaxFunction() {
request.open("GET", "resource.txt", true);
request.onreadystatechange = updatePage;
request.send(null);
}
Stvaranje zahtjeva
● open()
● parametri: HTTP metoda (GET, POST, HEAD...),
URL, asinkroni (true) ili sinkroni (false) mod rada
● zahtjev je sandboxan na domenu
● priprema zahtjev, ne zapo inje konekcijuč
● onreadystatechange
● postavite gotovu funkciju ili umetnite novu
request.onreadystatechange =
function() { // JS kod }
Stvaranje zahtjeva
● send()
● šalje zahtjev
● parametar: što se šalje
– ako je GET ili HEAD onda šaljemo null (sve je kodirano u
URI-ju)
Obrada odgovora: callback funkcija
● callback funkcija se zove više puta, za svaki odgovor
poslužitelja
● treba testirati u kakvom je statusu zahtjev i primiti
odgovor
● readyState
– u kojoj je fazi rada (0 – prije open(), 1 – sve namješteno (prije
send()), 2 – poslan zahtjev (server radi), 3 – primljeno djelomi no,č
4 – primljeno sve)
● status
– HTTP response kodovi (5 predavanje! :D 200 – uspješna
komunikacija)
● responseText
– dobiveni odgovor
Obrada odgovora
function updatePage() {
if (request.readyState == 4 &&
request.status == 200)
{ var odgovor = request.responseText;
//obrada odgovora
}
}
Osvježavanje DOM-a
● standardni rad sa HTML DOM-om
● Važno je obraditi dobiveni odgovor
● obrada XML-a
– XML koristi XML DOM.
● obrada JSON-a
● isti tekst (HTML kod)č
document.geteElementById('nekiId').innerHTML= odgovor;
Rad sa XML-om
var xml = "<order><table>" + escape(table) + "</table><line><beer>"
+ escape(beer) + "</beer><quantity>" + escape(quantity) +
"</quantity></line></order>";
request.open("POST", "services/order", true);
//promjeni Content-type kako bi podaci bili prepoznati kao XML
request.setRequestHeader("Content-Type", "text/xml");
// odredi callback funkciju
request.onreadystatechange = updatePage;
//pošalji XML
request.send(xml);
function updatePage() {
if (request.readyState == 4 && request.status == 200) {
var xml = request.responseXML;
//rad sa odgovorenim XML dokumentom
}
}
Rad sa JSON-om
● obrada XML-a je teška. JSON objekti su jednostavni
var jsonObjekt={"order": [ “table”: table, line:[ "beer": beer,
“quantity”:quantity ]]};
request.open("POST", "services/order", true);
// odredi callback funkciju
request.onreadystatechange = updatePage;
//pošalji JSON
request.send(jsonObjekt.toJSONString());
function updatePage() {
if (request.readyState == 4 && request.status == 200) {
var noviJSONobjekt = JSON.parse(request.responseText);
//rad sa JSON objektom
}
}
Može li se lakše?
● gotovo svaki JS framework ima AJAX pozive
● jQuery
● ajax funkcija
● callback funkcija ovisno o uspjehu konekcije
– beforeSend, error, dataFilter, success, complete
● možete imati više callback funkcija za isti uspjeh
var jqxhr = $.ajax({ url: "example.php" })
.success(function() { alert("success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
jQuery AJAX
● jQuery pokušava prepoznati podatke
● prepoznaje XML prema Content-type-u koji šalje server
● ako je primljen HTML (opet Content-type), JavaScript iz tog
koda se izvršava
● ako je JSON objekt, postoji jQuery .parseJSON() funkcija
koja parsira JSON (ako browser nema ugra enu sigurnuđ
verziju parsera)
// ovaj primjer šalje podatke na server POST metodom
// i u alert box-u daje informaciju koju je vratio server
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
COMET
● AJAX napravi zahtjev koji se izvrši
● PULL pristup server-klijent arhitekturi
● kako poslati podatke sa servera prema klijentu
bez da on posebno zatraži
● PUSH pristup
– Mogu sa HTML 5 i Server Side Eventsć
● COMET je skupni naziv za neke od tehnologija koje
omogu uju PUSHć
– ideje:
● streaming - jedna konekcija koja se nikad ne gasi (npr iframe)
● AJAX sa dugim vremenom ekanja dok server ne isporu i podatkeč č
Idu e predavanjeć
● Izrada stranica za mobilne platforme

More Related Content

Similar to [TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.

Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPCKarlo Novak
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Nenad Pecanac
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaFive
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. Stipe Predanic
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeMihovil Rister
 
Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)IT Showoff
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeMatija Šmalcelj
 
AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević Kruno Ris
 
Web App Security for Devs
Web App Security for DevsWeb App Security for Devs
Web App Security for DevsAxilis
 
Web App Security for Devs
Web App Security for DevsWeb App Security for Devs
Web App Security for DevsVedran Maršić
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7. Stipe Predanic
 

Similar to [TVZ računarstvo] Dinamičke web aplikacije, predavanje 10. (12)

Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPC
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, Javantura
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
 
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil RisterJavantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
 
Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacije
 
AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević AngularJS - Ivan Vučičević
AngularJS - Ivan Vučičević
 
Web App Security for Devs
Web App Security for DevsWeb App Security for Devs
Web App Security for Devs
 
Web App Security for Devs
Web App Security for DevsWeb App Security for Devs
Web App Security for Devs
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.
 

More from Stipe Predanic

Osnove bežičnih mreža - Predavanje: Topologije
Osnove bežičnih mreža - Predavanje: TopologijeOsnove bežičnih mreža - Predavanje: Topologije
Osnove bežičnih mreža - Predavanje: TopologijeStipe Predanic
 
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli Stipe Predanic
 
Osnove bežičnih mreža - Predavanje: Antene
Osnove bežičnih mreža - Predavanje: AnteneOsnove bežičnih mreža - Predavanje: Antene
Osnove bežičnih mreža - Predavanje: AnteneStipe Predanic
 
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacijeOsnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacijeStipe Predanic
 
[ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017 [ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017 Stipe Predanic
 
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016 [ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016 Stipe Predanic
 
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016 [ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016 Stipe Predanic
 
[ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016 [ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016 Stipe Predanic
 
[ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016 [ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016 Stipe Predanic
 
[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOS[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOSStipe Predanic
 
[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljača[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljačaStipe Predanic
 
[ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051 [ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051 Stipe Predanic
 
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016) [ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016) Stipe Predanic
 
[ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora [ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora Stipe Predanic
 
[ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova [ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova Stipe Predanic
 
[ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita) [ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita) Stipe Predanic
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12. Stipe Predanic
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. Stipe Predanic
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4. Stipe Predanic
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3. Stipe Predanic
 

More from Stipe Predanic (20)

Osnove bežičnih mreža - Predavanje: Topologije
Osnove bežičnih mreža - Predavanje: TopologijeOsnove bežičnih mreža - Predavanje: Topologije
Osnove bežičnih mreža - Predavanje: Topologije
 
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli
Osnove bežičnih mreža - Predavanje 4: 802.11 protokoli
 
Osnove bežičnih mreža - Predavanje: Antene
Osnove bežičnih mreža - Predavanje: AnteneOsnove bežičnih mreža - Predavanje: Antene
Osnove bežičnih mreža - Predavanje: Antene
 
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacijeOsnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacije
 
[ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017 [ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017
 
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016 [ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
 
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016 [ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
 
[ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016 [ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016
 
[ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016 [ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016
 
[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOS[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOS
 
[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljača[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljača
 
[ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051 [ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051
 
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016) [ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
 
[ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora [ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora
 
[ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova [ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova
 
[ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita) [ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita)
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 3.
 

[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.

  • 2. AJAX ● Asynchronous JavaScript and XML ● zašto koristiti AJAX? ● Asinkrono ● JavaScript ● XML – ili zamjene...
  • 3. Asinkronost ● JavaScript izvršava UI dretvu (jednu!) ● web worker u HTML-u 5 ne radi kroz UI dretvu, ve uć dodatnim dretvama ● asinkrono slanje dopušta ● slanje i primanje podataka prema/od servera bez uplitanja u normalan tijek rada JS koda ● kad stigne odgovor – obradi se. ● prednost: brži odziv jer je komunikacija “nevidljiva” korisniku ● nedostatak: kompleksnost sustava
  • 4. JavaScript & XML ● JavaScript ● osnovni jezik na webu. ● XML ● eXtensible Markup Language ● služi za razmjenu podataka izme u sustavađ ● u AJAX-u se za razmjena podataka mogu koristiti i drugi na inič ● isti tekstč ● JSON
  • 5. Zašto je AJAX popularan? ● Server – klijent arhitektura vs Debeli - tanki klijenti ● AJAX dopušta debele klijente u web okruženju! ● klijent dobiva – bolji odaziv i interaktivnost aplikacije – manje optere enje mrežnih resursa (!?!?)ć
  • 6. Nije sve tako lijepo ● AJAX aplikacije je ● kompleksnije izvesti ● inicijalno u itavanje aplikacije (uobi ajeno) traječ č duže ● kompatibilnost izme u browserađ ● sigurnost
  • 7. Usamljeni otok? ● AJAX nije jedina tehnologija koja nudi (ili je nudila) ovakve mogu nostić ● FLASH ● SilverLight ● Java appleti ● Mozilla XUL ● i drugi (npr. OpenLaszlo)
  • 8. Ideja AJAX-a ● napravi zahtjev ● stvaranje XMLHttpRequest (ili sli no)č ● poslati zahtjev poslužitelju ● standardni GET/POST ● obraditi odgovor ● osvježiti HTML dokument ● vlastiti JS kod ili neki od JS frameworka
  • 9. Izrada zahtjeva var request = false; try { request = new XMLHttpRequest(); } catch (ms) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (ms2) { request = new ActiveXObject("Microsoft.XMLHTTP"); } }
  • 10. Slanje zahtjeva ● otvori zahtjev (postavi parametre) ● postavi callback funkciju ● pošalji zahtjev function myAjaxFunction() { request.open("GET", "resource.txt", true); request.onreadystatechange = updatePage; request.send(null); }
  • 11. Stvaranje zahtjeva ● open() ● parametri: HTTP metoda (GET, POST, HEAD...), URL, asinkroni (true) ili sinkroni (false) mod rada ● zahtjev je sandboxan na domenu ● priprema zahtjev, ne zapo inje konekcijuč ● onreadystatechange ● postavite gotovu funkciju ili umetnite novu request.onreadystatechange = function() { // JS kod }
  • 12. Stvaranje zahtjeva ● send() ● šalje zahtjev ● parametar: što se šalje – ako je GET ili HEAD onda šaljemo null (sve je kodirano u URI-ju)
  • 13. Obrada odgovora: callback funkcija ● callback funkcija se zove više puta, za svaki odgovor poslužitelja ● treba testirati u kakvom je statusu zahtjev i primiti odgovor ● readyState – u kojoj je fazi rada (0 – prije open(), 1 – sve namješteno (prije send()), 2 – poslan zahtjev (server radi), 3 – primljeno djelomi no,č 4 – primljeno sve) ● status – HTTP response kodovi (5 predavanje! :D 200 – uspješna komunikacija) ● responseText – dobiveni odgovor
  • 14. Obrada odgovora function updatePage() { if (request.readyState == 4 && request.status == 200) { var odgovor = request.responseText; //obrada odgovora } }
  • 15. Osvježavanje DOM-a ● standardni rad sa HTML DOM-om ● Važno je obraditi dobiveni odgovor ● obrada XML-a – XML koristi XML DOM. ● obrada JSON-a ● isti tekst (HTML kod)č document.geteElementById('nekiId').innerHTML= odgovor;
  • 16. Rad sa XML-om var xml = "<order><table>" + escape(table) + "</table><line><beer>" + escape(beer) + "</beer><quantity>" + escape(quantity) + "</quantity></line></order>"; request.open("POST", "services/order", true); //promjeni Content-type kako bi podaci bili prepoznati kao XML request.setRequestHeader("Content-Type", "text/xml"); // odredi callback funkciju request.onreadystatechange = updatePage; //pošalji XML request.send(xml); function updatePage() { if (request.readyState == 4 && request.status == 200) { var xml = request.responseXML; //rad sa odgovorenim XML dokumentom } }
  • 17. Rad sa JSON-om ● obrada XML-a je teška. JSON objekti su jednostavni var jsonObjekt={"order": [ “table”: table, line:[ "beer": beer, “quantity”:quantity ]]}; request.open("POST", "services/order", true); // odredi callback funkciju request.onreadystatechange = updatePage; //pošalji JSON request.send(jsonObjekt.toJSONString()); function updatePage() { if (request.readyState == 4 && request.status == 200) { var noviJSONobjekt = JSON.parse(request.responseText); //rad sa JSON objektom } }
  • 18. Može li se lakše? ● gotovo svaki JS framework ima AJAX pozive ● jQuery ● ajax funkcija ● callback funkcija ovisno o uspjehu konekcije – beforeSend, error, dataFilter, success, complete ● možete imati više callback funkcija za isti uspjeh var jqxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); }); // perform other work here ... // Set another completion function for the request above jqxhr.complete(function(){ alert("second complete"); });
  • 19. jQuery AJAX ● jQuery pokušava prepoznati podatke ● prepoznaje XML prema Content-type-u koji šalje server ● ako je primljen HTML (opet Content-type), JavaScript iz tog koda se izvršava ● ako je JSON objekt, postoji jQuery .parseJSON() funkcija koja parsira JSON (ako browser nema ugra enu sigurnuđ verziju parsera) // ovaj primjer šalje podatke na server POST metodom // i u alert box-u daje informaciju koju je vratio server $.ajax({ type: "POST", url: "some.php", data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); } });
  • 20. COMET ● AJAX napravi zahtjev koji se izvrši ● PULL pristup server-klijent arhitekturi ● kako poslati podatke sa servera prema klijentu bez da on posebno zatraži ● PUSH pristup – Mogu sa HTML 5 i Server Side Eventsć ● COMET je skupni naziv za neke od tehnologija koje omogu uju PUSHć – ideje: ● streaming - jedna konekcija koja se nikad ne gasi (npr iframe) ● AJAX sa dugim vremenom ekanja dok server ne isporu i podatkeč č
  • 21. Idu e predavanjeć ● Izrada stranica za mobilne platforme