AJAX je akronim koji označava asinhroni Javascript i XML. Zapravo, AJAX nije nova tehnologija, pošto i Javascript i XML postoje već neko vrijeme, a AJAX je sinteza ovih tehnologija. AJAX se najčešće povezuje sa pojmom Web 2.0 i reklamira se kao najnovija Web aplikacija.
Sa AJAX-om, nema potrebe za osvježavanjem cijele stranice svaki put, jer se ažurira samo određeni dio stranice. Mnogo je praktičnije, jer ne morate dugo čekati, i ekonomičnije, jer nemaju svi neograničeni internet. Istina, u ovom slučaju, programer mora biti siguran da je korisnik svjestan onoga što se dešava na stranici. Ovo se može uraditi pomoću indikatora učitavanja, tekstualnih poruka koje ukazuju da se podaci razmjenjuju sa serverom. Takođe treba imati na umu da svi pretraživači ne podržavaju AJAX (starije verzije pretraživača i tekstualnih pretraživača). Plus Javascript korisnik može onemogućiti. Stoga ne biste trebali zloupotrebljavati korištenje tehnologije i pribjegavati alternativnim metodama predstavljanja informacija na web stranici.
Da sumiramo prednosti AJAX-a:
- Mogućnost kreiranja prikladnog web sučelja
- Aktivna interakcija korisnika
- Pogodnost upotrebe
Razmjena podataka
Za razmjenu podataka na stranici mora biti kreiran XMLHttpRequest objekat, koji je svojevrsni posrednik između pretraživača korisnika i servera (slika 1). Koristeći XMLHttpRequest, možete poslati zahtjev serveru, kao i dobiti odgovor u obliku različitih vrsta podataka.
Postoje dva načina za razmjenu podataka sa serverom. Prvi način je GET zahtjev. U ovom zahtjevu pristupate dokumentu na serveru prosljeđivanjem argumenata preko samog URL-a. U ovom slučaju, na strani klijenta će biti logično koristiti Javascript escape funkciju kako neki podaci ne bi prekinuli zahtjev.
Klijentski dio, napisan u Javascriptu, mora obezbijediti potrebnu funkcionalnost za sigurnu komunikaciju sa serverom i obezbijediti metode za razmjenu podataka na bilo koji od gore navedenih načina. Serverska strana mora obraditi ulazne podatke i na osnovu njih generisati nove informacije (na primjer, rad sa bazom podataka) i vratiti ih klijentu. Na primjer, da biste zatražili informacije od servera, možete koristiti običan GET zahtjev sa prijenosom nekoliko i malih parametara, a za ažuriranje informacija, ili dodavanje novih informacija, morat ćete koristiti POST zahtjev, jer on omogućava da prenosite velike količine podataka.
Kao što je već rečeno, AJAX koristi asinhroni prijenos podataka. To znači da dok je prijenos podataka u toku, korisnik može obavljati druge radnje koje su mu potrebne. U ovom trenutku trebate obavijestiti korisnika da je u toku neka vrsta razmjene podataka, inače će korisnik pomisliti da se nešto dogodilo i može napustiti stranicu ili ponovo pozvati funkciju koja je po njegovom mišljenju "zamrznuta". Indikacija tokom razmene podataka u Web 2.0 aplikaciji igra veoma važnu ulogu: posetioci se možda još nisu navikli na ovaj način osvežavanja stranice.
Odgovor servera može biti ne samo XML, kao što naziv tehnologije sugerira. Pored XML-a, možete dobiti odgovor u običnom tekstu ili JSON-u (Javascript Object Notation). Ako je odgovor primljen u običnom tekstu, onda se može odmah prikazati u kontejneru na stranici. Kada se primi XML odgovor, rezultirajući XML dokument se obično obrađuje na strani klijenta i podaci se konvertuju u (X) HTML. Kada primi JSON odgovor, klijent samo treba da izvrši primljeni kod (funkcija Javascript eval) da bi dobio kompletan Javascript objekat. Ali ovdje morate biti oprezni i uzeti u obzir činjenicu da se korištenjem ove tehnologije može prenijeti zlonamjerni kod, pa ga prije izvršavanja koda primljenog sa servera treba pažljivo provjeriti i obraditi. Postoji praksa kao što je "lažni" zahtjev, u kojem se ne prima odgovor od servera, samo se mijenjaju podaci na strani servera.
Ovaj objekat ima različita svojstva u različitim pretraživačima, ali općenito je isti.
Metode objekata XMLHttpRequest
Imajte na umu da su imena metoda napisana u istom Camel stilu kao i druge Javascript funkcije. Budite oprezni kada ih koristite.
prekinuti ()- otkazivanje trenutnog zahtjeva serveru.
getAllResponseHeaders ()- dobiti sva zaglavlja odgovora sa servera.
getResponseHeader ("header_name")- dobiti navedeni naslov.
open ("request_type", "url", "asynchronous", "username", "password")- inicijalizacija zahtjeva prema serveru, indikacija metode zahtjeva. Vrsta zahtjeva i URL su obavezni parametri. Treći argument je logička vrijednost. Obično je uvijek navedeno kao istinito ili uopće nije navedeno (podrazumevano je tačno). Četvrti i peti argument se koriste za autentifikaciju (veoma je nesigurno pohranjivati podatke o autentifikaciji u skriptu, jer svaki korisnik može vidjeti skriptu).
pošalji ("sadržaj")- poslati HTTP zahtjev serveru i dobiti odgovor.
setRequestHeader ("header_name", "value")- postavite vrijednosti zaglavlja zahtjeva.
Svojstva objekta XMLHttpRequest
onreadystatechange je jedno od najvažnijih svojstava XMLHttpRequest objekta. Uz pomoć ovog svojstva postavlja se rukovalac koji se poziva svaki put kada se status objekta promijeni.
readyState- broj koji označava status objekta.
responseText- prezentacija odgovora servera u obliku običnog teksta (string).
responseXML- DOM-kompatibilan dokument objekta primljen od servera.
status- stanje odgovora sa servera.
statusText- tekstualni prikaz stanja odgovora sa servera.
Trebali biste pobliže pogledati svojstvo readyState:
- 0 - Objekt nije inicijaliziran.
- 1 - Objekt učitava podatke.
- 2 - Objekt je učitao svoje podatke.
- 3 - Objekt nije u potpunosti učitan, ali može komunicirati s korisnikom.
- 4 - Objekt je potpuno inicijaliziran; dobio odgovor od servera.
Kreiranje XMLHttpRequest objekta
Kao što je gore spomenuto, kreiranje ovog objekta za svaki tip pretraživača je jedinstven proces.
Na primjer, za kreiranje objekta u Gecko kompatibilnim pretraživačima, Konqueror i Safari, koristili biste sljedeći izraz:
Var Zahtjev = novi XMLHttpRequest ();
A za Internet Explorer se koristi sljedeće:
Var Request = novi ActiveXObject ("Microsoft.XMLHTTP");
Var Zahtjev = novi ActiveXObject ("Msxml2.XMLHTTP");
Sada, da biste postigli kompatibilnost među pretraživačima, morate dodati sve funkcije u jednu:
Funkcija CreateRequest () (var Request = false; if (window.XMLHttpRequest) (// Gecko kompatibilni pretraživači, Safari, Konqueror Request = novi XMLHttpRequest ();) else if (window.ActiveXObject) (// Internet explorer pokušajte (Request = novi ActiveXObject ("Microsoft.XMLHTTP");) catch (CatchException) (Zahtev = novi ActiveXObject ("Msxml2.XMLHTTP");)) if (! Zahtev) (upozorenje ("Nije moguće kreirati XMLHttpRequest");) return Zahtev; )
Nakon svega ovoga, možete kreirati ovaj objekat i ne brinite o performansama na popularnim pretraživačima. Ali možete kreirati objekt na različitim mjestima. Ako ga kreirate globalno, tada će u određenom trenutku biti moguć samo jedan zahtjev prema serveru. Moguće je kreirati objekat kad god postoji zahtjev prema serveru (ovo će skoro u potpunosti riješiti problem).
Zahtjev servera
Algoritam za traženje servera izgleda ovako:
- Provjera postojanja XMLHttpRequest-a.
- Inicijalizacija veze sa serverom.
- Slanje zahtjeva serveru.
- Obrada primljenih podataka.
/ * Funkcija za slanje zahtjeva u datoteku na serveru r_method - tip zahtjeva: GET ili POST r_path - putanja do datoteke r_args - argumenti oblika a = 1 & b = 2 & c = 3 ... r_handler - funkcija koja rukuje odgovorom servera * / funkcija SendRequest (r_method, r_path, r_args, r_handler) (// Kreirajte zahtjev var Request = CreateRequest (); // Provjerite postojanje zahtjeva ponovo ako (! Request) (return; ) // Dodijeli prilagođeni rukovalac Request.onreadystatechange = function () (// Ako je razmjena podataka završena if (Request.readyState == 4) (// Prenesi kontrolu na rukovatelja korisnika r_handler (Zahtjev);)) // Provjeri ako je GET zahtjev potreban if (r_method.toLowerCase () == "get" && r_args.length> 0) r_path + = "?" + r_args; // Inicijaliziranje veze Request.open (r_method, r_path, true); if (r_method.toLowerCase () == "post") (// Ako je ovo POST- zahtjev // Postavite Request.setRequestHeader ("Content-Type", "application / x-www-form-urlencoded; charset = utf -8"); // Slanje m zahtjev Request.send (r_args); ) else (// Ako je ovo GET zahtjev // Pošalji null zahtjev Request.send (null);))
Postalo je mnogo lakše kreirati zahtjev. Na primjer, napišimo funkciju koja će primiti sadržaj datoteke na serveru i poslati ga u kontejner.
Funkcija ReadFile (ime datoteke, kontejner) (// Kreirajte funkciju rukovatelja var Handler = function (Request) (document.getElementById (container) .innerHTML = Request.responseText;) // Pošaljite zahtjev SendRequest ("GET", naziv datoteke, " ", Handler);)
Ovako se odvija interakcija sa serverom.
Obrada odgovora
U prethodnom primjeru napravili smo funkciju zahtjeva servera. Ali to je, u stvari, nesigurno, jer ne obrađujemo stanje objekta i stanje odgovora sa servera.
Ažurirajmo naš kod tako da može prikazati vizualno obavještenje o procesu učitavanja.
Request.onreadystatechange = funkcija () (// Ako je razmjena podataka završena if (Request.readyState == 4) (// Prenesi kontrolu na rukovaoca korisnika r_handler (Zahtjev);) else (// Obavijesti korisnika o učitavanju)) ...
Kao što već znate, objekat XMLHttpRequest vam omogućava da saznate status odgovora sa servera. Iskoristimo ovu priliku.
Request.onreadystatechange = funkcija () (// Ako je razmjena podataka završena if (Request.readyState == 4) (if (Request.status == 200) (// Prenesi kontrolu na rukovaoca korisnika r_handler (Request);) else (// Obavijesti korisnika o grešci)) else (// Obavijesti korisnika o preuzimanju)) ...
Opcije odgovora servera
Sa servera se može primiti nekoliko vrsta podataka:
- Običan tekst
Json je notacija Javascript objekata. Može se koristiti za predstavljanje objekta kao string (ovdje je analogija s funkcijom serijalizacije). Kada primite JSON podatke, morate ih izvršiti da biste dobili punopravni Javascript objekat i izvršili potrebne operacije na njemu. Imajte na umu da takav prijenos i izvršenje podataka nije siguran. Morate pratiti šta dolazi za izvršenje.
Uzorak JSON koda:
("podaci": ("razno": [("name": "JSON stavka jedan", "tip": "Podnaslov 1"), ("naziv": "JSON stavka dva", "tip": " Podnaslov 2 ")]))
Po prijemu takvog koda, vršimo sljedeću radnju:
Var responsedata = eval ("(" + Request.responseText + ")")
Nakon izvršenja ovog koda, objekat će vam biti dostupan responsedata.
Rad sa programskim jezicima na strani servera
Ovakav posao se ne razlikuje od uobičajenog. Za primjere, uzeću PHP kao jezik na strani servera. Ništa se nije promijenilo na strani klijenta, ali strana servera je sada predstavljena PHP datotekom.
Po tradiciji, počnimo tako što ćemo pozdraviti naš divni svijet:
Eho "Zdravo, svet!";
Kada se pristupi ovoj datoteci, klijent će vratiti string Hello, World. Kao što možete zamisliti, ovo predstavlja najšire mogućnosti za izgradnju aplikacija. Prenošenjem argumenata prilikom pozivanja servera koristeći XMLHttpRequest, možete parametrizovati izlaz, pružajući tako bogatu funkcionalnost za vašu Web aplikaciju.
Osim PHP-a, možete koristiti bilo koji drugi programski jezik na strani servera.
AJAX - Šta je to?
Kada postojećih mogućnosti postane malo, a postojeću se nema gdje poboljšati, tada dolazi do tehnološkog iskora. Takav proboj je AJAX (Asynchronous JavaScript and XML) - pristup izgradnji korisničkih interfejsa za web aplikacije u kojima web stranica, bez ponovnog učitavanja, učitava podatke koji su potrebni korisniku. AJAX je jedna od komponenti DHTML koncepta.
Šta nam ova tehnologija daje? Trenutno, razvoj WEB aplikacija teži razlikovanju između klijentske i serverske strane, i to je razlog za široku upotrebu šablona kao što su Smarty i XSLT. Sada projekti postaju složeniji, a preplitanje različitih tehnologija postaje preskupo za vrijeme programera. Tako se, na primjer, svi stilovi oblikovanja izvode u CSS ili XSL datotekama, HTML ili XML podaci se pohranjuju u drugim odjeljcima, rukovaoci servera u trećem, baze podataka u četvrtom. I ako se prije 5-6 godina gotovo svuda moglo vidjeti preplitanje svega ovoga u jednom fajlu, sada to postaje sve više rijetkost.
Prilikom razvoja složenijih projekata, postoji potreba za strukturiranošću i čitljivošću koda. Ne biste trebali zasipati programerski kod kodom dizajnera rasporeda, a kod dizajnera izgleda sa izmjenama dizajnera i tako dalje.
Postoji potreba da se rad razlikuje. Tako će, na primjer, dizajner raditi svoj posao, layout dizajner svoj, programer svoj, i niko se neće miješati jedni u druge. Kao rezultat toga, svaki učesnik projekta moraće da zna samo podatke sa kojima će morati da radi. U ovom slučaju se značajno povećava produktivnost grupe i kvaliteta projekta. Trenutno se ovaj problem uspješno rješava korištenjem šablona, ali i to stvara određene poteškoće, jer je za, recimo, povezivanje Smartyja potrebno povezati softverski modul za obradu šablona i jasno ga povezati sa strukturom projekta. A to je daleko od uvijek moguće i zahtijeva određene troškove. Malo je lakše kada koristite XML + XSL pakete jer oni pružaju više opcija, ali ovo je alternativa, ništa više. Ali šta ako pogledate nešto radikalno novo, što bi vam omogućilo da sve bolje kombinujete, koristeći mogućnosti onoga što jeste? Pokušajte zamisliti JavaScript, koji ima sve mogućnosti PHP-a ili Perl-a, uključujući grafiku i baze podataka, koji je mnogo proširiviji i upotrebljiviji, a također je i cross-platformski.
Dakle, šta je zapravo AJAX? O Ajaxu se prvi put govorilo nakon članka Jesseja Jamesa Garretta iz februara 2005. "Novi pristup web aplikacijama". Ajax nije tehnologija za sebe. Ovo je ideja zasnovana na dva glavna principa.
Korištenje DHTML-a za dinamičku promjenu sadržaja stranice.
Korištenje XMLHttpRequest za pristup serveru u hodu.
Korištenje ova dva pristupa omogućava vam da kreirate mnogo pogodnije WEB-korisničke interfejse na onim stranicama sajtova gde je potrebna aktivna interakcija korisnika. Upotreba Ajaxa je postala popularnija nakon što je Google počeo da ga aktivno koristi u kreiranju svojih stranica, kao što su Gmail, Google mape i Google sugeriraju. Kreiranje ovih sajtova je potvrdilo efikasnost ovog pristupa.
Dakle, detaljnije: ako uzmete klasični model WEB aplikacije:
Klijent, upisivanjem adrese resursa koji ga zanima u traku za pretragu, dolazi do servera i postavlja mu zahtjev. Server vrši proračune u skladu sa zahtjevom, pristupa bazi podataka i tako dalje, nakon čega primljeni podaci odlaze do klijenta i po potrebi se zamjenjuju u šablone i obrađuju pretraživač. Rezultat je stranica koju vidimo, a koju 80% stanovništva zemlje na WEB-u naziva internetom. Ovo je klasičan model koji se uspio dokazati i zaslužiti počasno mjesto na suncu. Ovo je najjednostavniji model interakcije i, kao posljedica toga, najrašireniji. Međutim, to sve više postaje nedovoljno. Zamislite on-line igru "Sea Battle", koju igraju dva prekaljena prijatelja - stanovnik Južne Afrike i stanovnik Japana. Kako možete učiniti njihovu igru što ugodnijom koristeći takav model? U svakom slučaju, podaci o potopljenim brodovima biće pohranjeni na serveru, a kako bi se provjerilo da li se protivniku ne sviđa, bit će potrebno svaki put osvježiti stranicu i ažurirati zastarjele podatke. "Ali ljudi su izmislili keširanje" - kažete, i bićete potpuno u pravu, ali to ne olakšava. Keširanje će samo ubrzati vrijeme interakcije sa serverom, ali neće eliminirati potrebu za ponovnim učitavanjem stranice. Alternativno, možete postaviti određeno vrijeme samoosvježavanja, ali u tom slučaju stranica će se u potpunosti ponovo učitati.
Pogledajmo sada AJAX model interakcije:
Redoslijed radnji klijenta je očuvan i on, najvjerovatnije, neće razumjeti šta će se dogoditi, a riječ AJAX će biti povezana samo s imenom fudbalskog kluba. Ali stvari izgledaju drugačije na strani servera.
Prilikom kontaktiranja servera generira se stranica koja će se prikazati korisniku i ponuditi mu da izvrši redoslijed radnji koje ga zanimaju. Uz svjesni (iako nije neophodan) izbor klijenta, njegov zahtjev će se odnositi na AJAX modul, koji će vršiti sve proračune od interesa za njega i raditi sa serverom kao takvim. Ali šta je inovacija? Glavna razlika je u tome što nam ova metoda omogućava dinamički pristup serveru i obavljanje radnji koje nas zanimaju. Na primjer, trebamo pristupiti bazi podataka i dobiti podatke koji nas zanimaju, a koje ćemo onda koristiti. Podatke ćemo pohraniti u XML datoteku koja će se generirati dinamički, na sljedeći način:
Kreirajte novi JavaScript objekat:
Var req = novi ActiveXObject ("Microsoft.XMLHTTP"); (za IE) var req = novi XMLHttpRequest (); (za sve ostalo)
Zatim pišemo funkciju koristeći ovaj objekt
Var req; funkcija loadXMLDoc (url) (// grana za izvorni XMLHttpRequest objekt if (window.XMLHttpRequest) (req = novi XMLHttpRequest (); req.onreadystatechange = processReqChange; req.open ("GET", url, true); req.send ( null); // grana za IE / Windows ActiveX verziju) else if (window.ActiveXObject) (req = novi ActiveXObject ("Microsoft.XMLHTTP"); if (req) (req.onreadystatechange = processReqChange; req.open ("GET ", url, istina); req.send ();)))
U tijelu HTML datoteke napišite skriptu koja će:
Funkcija checkName (unos, odgovor) (if (response! = "") (// Response mode message = document.getElementById ("nameCheckFailed"); if (response == "1") (message.className = "error"; ) else (message.className = "hidden";)) else (// Input mode url = "http: //localhost/xml/checkUserName.php? q =" \\ + input; loadXMLDoc (url);))
U datoteci localhost / xml / checkUserName.php obrađujemo podatke primljene iz komandne linije u ovom slučaju u varijablu q. Rezultat spremamo u XML strukturu, koju pohranjujemo u istu datoteku. Tako možemo primati i obraditi podatke primljene iz baze podataka ili bilo šta drugo što nam je potrebno. Osim toga, server će obraditi samo podatke koje trebamo ažurirati, a ne cijelu stranicu ako se ponovo učita.
A sada da se vratimo na naša dva prijatelja - ljubitelja pomorskih borbi: s obzirom na pojavu ove inovacije, možemo učiniti sljedeće: staviti provjeru svake tri sekunde XML datoteke, ova provjera podrazumijeva provjeru baze podataka za novi zapis, da je, potez protivnika. Ako je potez napravljen, stranica potapa brodove bez ponovnog utovara, čime se kvari raspoloženje učesnika vodenih bitaka. Ova funkcionalnost se postiže jednostavnom upotrebom Javascript-a i stilova. Ovaj primjer je prilično ilustrativan, ali daleko od potpune primjene ove tehnologije je mnogo značajnija.
Međutim, nije sve tako jednostavno. Pogledajmo sada negativne osobine.
Prvo, podatke možemo prenijeti samo koristeći GET metodu; stoga će velike količine podataka morati ostati na miru. Ovaj problem je već više puta pokrenut u raznim izvorima, ali gospodo, postoje kolačići koji su sasvim prihvatljivi u slučajevima prijenosa velikih podataka, koji mogu prihvatiti GET zahtjev, a Javascript zauzvrat ima funkcije za rad s njima.
Drugi problem je kompatibilnost među pretraživačima. XMLHttpRequest objekat još nije dio nijednog standarda (iako je nešto slično već predloženo u W3C DOM Level 3 specifikaciji Load and Save). Stoga, postoje dvije različite metode za pozivanje ovog objekta u kodu skripte. U Internet Exploreru, ActiveX objekat se poziva na sljedeći način:
Var req = novi ActiveXObject ("Microsoft.XMLHTTP");
U Mozili i Safariju, ovo je lakše (pošto je to objekat ugrađen u JavaScript):
Var req = novi XMLHttpRequest ();
Svi moderni pretraživači podržavaju ovaj objekat i samo 1,8% korisnika (prema statistici iz SpyLog-a) koji koriste veoma stare verzije pretraživača koji ne podržavaju ovaj objekat imaće problema.
I konačno, sigurnost. Hajde da se zadržimo na ovome detaljnije. Glavni problem je što se svi podaci i izvorni kod JavaScript funkcija mogu vidjeti pregledom izvornog koda stranice, shodno tome, napadač može pratiti logiku izvršenja zahtjeva i, pod određenim skupom okolnosti, izvršiti skup komande koje su mu potrebne. To ne igra posebnu ulogu kada imamo jednostavno poređenje podataka, već šta učiniti u složenijim situacijama, na primjer, prilikom autorizacije i kako, u ovom slučaju, proći lozinke. Kao što je već spomenuto, kolačići dolaze u pomoć. Uz njihovu pomoć se mogu slati potrebni podaci, kao i obraditi. Uzmimo primjer u kojem će korisnik biti autentificiran korištenjem tehnologije o kojoj je članak riječ.
Generirajući stranicu, formiramo jedinstvene vrijednosti, koje zatim stavljamo u varijable servera. A u kolačićima pretraživača, nakon autorizacije, dobijamo korisničko ime i njegovu lozinku, koje trebamo prenijeti u modul za obradu na serveru.
Nakon što korisnik unese podatke i pritisne dugme Pošalji, njegova lozinka se unosi u kolačiće, a korisničko ime se prenosi otvoreno - linkom npr. http://www.mubestajax.com/ajax.php?login=pupkin pri prijemu podataka server prije svega provjerava primljene podatke. S obzirom da se vrijednosti koje smo generirali od početka rada servera i potom ih prenijeli na globalne serverske varijable i kolačiće moraju poklapati, onda prilikom provjere integriteta prenesenih podataka, ako postoji neusklađenost, program prestaje s radom. Ako je sve prošlo dobro, tada se izvlače svi potrebni podaci i izvode se potrebni proračuni i rad. Ovaj način zaštite je prilično jednostavan i efikasan. Ali za velike projekte to neće raditi.
Kada je sigurnost na prvom mjestu, bolje je koristiti sofisticiranija i pouzdanija rješenja. Ali u većini slučajeva ove mjere opreza će biti više nego dovoljne, jer korištenje složenijih modula podrazumijeva korištenje tehnologija koje nisu uvijek uključene u standardni softver modernih servera, čija je glavna karakteristika jednostavnost. Zbog toga su tehnologije kao što su MySQL i PHP postale veoma raširene oni pružaju jednostavnost rada sa svojom malom potrošnjom resursa i dovoljnom pouzdanošću. A u okviru ovog softvera, rješenje koje je gore predloženo najbolje odgovara.
U zaključku, želio bih reći da je AJAX, s jedne strane, veliki skok u WEB inženjeringu, ali s druge strane, davno prevaziđena faza evolucije koja je otvorila nove horizonte u oblasti razvoja softvera. . Istovremeno, ova tehnologija je još uvijek prilično "vlažna", jer je njena upotreba u ovom trenutku prilično prijatan izuzetak. Ali siguran sam da će za nju svi čuti više puta.
Većina modernih web stranica koristi tehnologiju zvanu AJAX za brzu i efikasnu interakciju s posjetiteljem. AJAX je postao vrlo popularna tehnika za dohvaćanje podataka sa servera u pozadini i dinamičko osvježavanje stranice.
Razvoj JavaScript koda za implementaciju AJAX-a od nule je veoma naporan i zamoran proces. Međutim, mnoge JavaScript biblioteke, uključujući jQuery, imaju odlične implementacije AJAX visokog nivoa kao skup metoda i funkcija koje čine izradu web stranica lakšom i bržom.
U ovoj seriji tutorijala proći ćemo preko osnova izgradnje AJAX zahtjeva pomoću jQueryja. Obrađivaće se sljedeće teme:
- Šta je AJAX tehnologija? Kako to radi? Koje su njegove prednosti?
- Kako mogu napraviti različite vrste AJAX zahtjeva koristeći jQuery?
- Slanje podataka na server pomoću AJAX zahtjeva.
- Obrada i izdvajanje podataka iz AJAX odgovora sa servera.
- Kako da prilagodim jQuery AJAX rukovanje i promijenim zadane postavke?
Napomena: Tutorijali se fokusiraju na JavaScript dio na strani klijenta. Ali razvoj na strani servera je takođe prilično jednostavan. Za više informacija, trebali biste proučiti materijale o programskim jezicima na strani servera kao što je PHP.
Šta je AJAX i koliko je koristan?
AJAX je tehnika razvoja web aplikacija u kojoj JavaScript kod koji se izvodi u pretraživaču posjetitelja asinhrono komunicira s web serverom, odnosno u pozadini. Razlike od konvencionalnih web aplikacija su sljedeće:
- Redovna web stranica sadrži linkove ili obrasce koji, kada se kliknu ili predaju, generiraju zahtjev za novi URL na web serveru. Server šalje potpuno novu HTML stranicu, koju pretraživač zatim prikazuje, zamjenjujući originalnu stranicu. Ovaj pristup oduzima mnogo vremena i loše utiče na posjetitelja, jer moraju čekati da se nova stranica učita.
- Kada koristite AJAX tehnologiju, JavaScript kod postavlja zahtjev za URL na serveru. Kod također može slati podatke zajedno sa zahtjevom. JavaScript kod zatim obrađuje odgovor servera i djeluje u skladu s tim. Na primjer, mogu se izvršiti kalkulacije sa vraćenim podacima, dodati ili ažurirati widget na stranici, može se poslati poruka posjetitelju o ažuriranju baze podataka na serveru.
Budući da AJAX zahtjev radi u pozadini, JavaScript (i posjetitelj) mogu nastaviti interakciju sa stranicom dok se zahtjev obrađuje. Proces je skriven od posjetitelja koji ne mora napustiti stranicu koju gleda u određenom trenutku. Ovaj pristup čini AJAX stranice veoma ugodnim za rad.
Srce AJAX-a je JavaScript XMLHttpRequest objekat. Pruža brojne metode kao što su open (), send () i onreadystatechange () koje se mogu koristiti prilikom slanja AJAX zahtjeva serveru i obrade odgovora u pozadini.
Razvoj JavaScript AJAX koda za više pretraživača može biti naporan proces. Na sreću, jQuery vam daje neke jednostavne AJAX metode koje apstrahuju mnoge operacije niskog nivoa.
Za one znatiželjnije, riječ AJAX je skraćenica za prva slova izraza na engleskom " A sinhroni J avaScript A nd X ML "(Asinhroni JavaScript i XML.) Međutim, termin može biti pogrešan - zahtjev ne mora biti asinhroni i nije potrebno koristiti XML za slanje podataka.
Izrada GET zahtjeva sa $.get ()
Metoda jQuery $ .get () pruža jednostavan i zgodan način da napravite jednostavan AJAX zahtjev. Zahtjev pravi koristeći HTTP GET metodu (koristi se za dobivanje URL-ova kao što su stranice i slike) umjesto POST metode (koja se tradicionalno koristi za slanje podataka obrasca).
U svom najjednostavnijem obliku, možete pozvati metodu poput ove:
Gdje je url URL resursa s kojeg se očekuje odgovor. Ovo je obično skripta na strani servera koja izvodi neku radnju i može vratiti neke podatke:
$ .get ("http://example.com/getForecast.php");
Iako je moguće zatražiti i statički dokument:
$ .get ("http://example.com/mypage.html");
Kada tražite URL, možete poslati podatke uz zahtjev. Možete proslijediti podatke u nizu upita, baš kao i normalan GET zahtjev:
$ .get ("http://example.com/getForecast.php?city=rome&date=20120318");
Bilo bi ispravno učiniti isto tako što ćete proslijediti objekt podataka kao drugi parametar metodi $ .get (). Objekt podataka mora sadržavati informacije u obliku parova ime svojstva / vrijednost svojstva. Na primjer:
Var podaci = (grad: "rim", datum: "20120318"); $ .get ("http://example.com/getForecast.php", podaci);
Alternativno, možete proslijediti podatke metodi $ .get () kao string:
Var data = "grad = Rim & datum = 20120318"; $ .get ("http://example.com/getForecast.php", podaci);
Podatke primamo sa servera
Do sada smo gledali primjere korištenja $.get() samo za slanje zahtjeva serveru, zanemarujući svaki odgovor koji bi skripta na strani servera mogla generirati. Ali u većini slučajeva, vaš JavaScript kod će očekivati odgovor od skripte na strani servera i obraditi primljene podatke.
AJAX zahtjev je asinhroni, što znači da se izvršava u pozadini dok ostatak JavaScripta nastavlja da radi. Kako onda dobiti odgovor od servera kada se zahtjev završi?
Moraš pisati funkcija povratka koji će se automatski izvršiti kada se AJAX zahtjev završi i server pošalje odgovor. U najmanju ruku, vaša funkcija treba prihvatiti podatke koje vraća server kao svoj prvi argument:
Funkcija myCallback (returnedData) (// Obradite returnedData)
Jednom kada je funkcija povratnog poziva kreirana, možete je proslijediti kao treći argument metodi $ .get ():
Var podaci = (grad: "rim", datum: "20120318"); $ .get ("http://example.com/getForecast.php", podaci, myCallback);
Određivanje tipa podataka odgovora
Obično serverska strana prenosi podatke u jednom od nekoliko uobičajenih formata, uključujući XML, JSON, JavaScript ili HTML. Prema zadanim postavkama, jQuery pokušava odrediti najprikladniji format i u skladu s tim analizirati podatke. Ali bolje je eksplicitno definirati format.
Da biste naveli format, prosledite četvrti argument metodi $ .get (). Ovaj argument može biti niz sa sljedeće liste:
- "xml"
- "json"
- "skripta"
- "html"
Na primjer, ako znate da serverska skripta vraća podatke u JSON formatu, pozovite metodu $ .get () na sljedeći način:
$ .get ("http://example.com/getForecast.php", podaci, myCallback, "json");
Primjer korištenja metode $ .get ().
Evo primjera kreiranja AJAX zahtjeva pomoću metode $.get () i jednostavnog rukovanja odgovorom. Da bi primjer funkcionirao, trebate kreirati jednostavnu tekstualnu datoteku na serveru pod nazivom getForecast.txt koja sadrži sljedeći tekst:
("grad": "Vasyuki", "datum": "18. mart 2012", "prognoza": "Prohladno hladno i bljuzgavica", "maxTemp": +1)
Ova datoteka će simulirati JSON odgovor koji je mogao biti generiran skriptom vremenske prognoze na serveru.
Zatim kreiramo stranicu showForecast.html u istom folderu kao getForecast.txt: