AJAX este un acronim care înseamnă Javascript asincron și XML. De fapt, AJAX nu este o tehnologie nouă, deoarece atât Javascript, cât și XML există de ceva timp, iar AJAX este o sinteză a acelor tehnologii. AJAX este cel mai frecvent asociat cu termenul Web 2.0 și este prezentată ca cea mai nouă aplicație Web.
Când utilizați AJAX, nu este nevoie să actualizați întreaga pagină de fiecare dată, deoarece doar o anumită parte a acesteia este actualizată. Este mult mai convenabil, deoarece nu trebuie să așteptați mult și mai economic, deoarece nu toată lumea are internet nelimitat. Adevărat, în acest caz, dezvoltatorul trebuie să se asigure că utilizatorul este conștient de ceea ce se întâmplă pe pagină. Acest lucru poate fi implementat folosind indicatori de încărcare, mesaje text că datele sunt schimbate cu serverul. De asemenea, trebuie să înțelegeți că nu toate browserele acceptă AJAX (vechi browsere și browsere de text). Plus Javascript poate fi dezactivat de către utilizator. Prin urmare, nu trebuie să abuzați de utilizarea tehnologiei și să apelați la metode alternative de prezentare a informațiilor pe site-ul Web.
Să rezumăm avantajele AJAX:
- Posibilitatea de a crea o interfață web ușor de utilizat
- Interacțiune activă cu utilizatorul
- Comoditatea utilizării
Schimb de date
Pentru a face schimb de date, pe pagină trebuie creat un obiect XMLHttpRequest, care este un fel de intermediar între browserul utilizatorului și server (Fig. 1). Folosind XMLHttpRequest, puteți trimite o solicitare către server, precum și puteți primi un răspuns sub formă de diferite tipuri de date.
Există două moduri de a face schimb de date cu serverul. Prima modalitate este o solicitare GET. În această solicitare, accesați un document de pe server, transmițându-i argumente prin adresa URL în sine. În același timp, din partea clientului, va fi logic să folosiți funcția de evadare Javascript, astfel încât unele date să nu întrerupă cererea.
Partea client, scrisă în Javascript, trebuie să ofere funcționalitatea necesară pentru comunicarea securizată cu serverul și să ofere metode de schimb de date în oricare dintre modurile de mai sus. Partea server trebuie să prelucreze datele de intrare și pe baza acestora să genereze informații noi (de exemplu, lucrul cu baza de date) și să le restituie clientului. De exemplu, pentru a solicita informații de la server, puteți utiliza o solicitare GET obișnuită cu transferul mai multor parametri mici și pentru a actualiza informații sau pentru a adăuga informații noi, va trebui să utilizați o solicitare POST, deoarece vă permite să transferați mari cantități de date.
După cum sa menționat deja, AJAX utilizează transferul de date asincron. Aceasta înseamnă că în timp ce datele sunt transferate, utilizatorul poate efectua alte acțiuni de care are nevoie. În acest moment, utilizatorul ar trebui să fie anunțat că are loc un fel de schimb de date, în caz contrar, utilizatorul se va gândi că s-a întâmplat ceva greșit și poate părăsi site-ul sau reapelează funcția care a „atârnat”, în opinia sa. Indicarea în timpul comunicării într-o aplicație Web 2.0 joacă un rol foarte important: este posibil ca vizitatorii să nu fie încă obișnuiți cu aceste modalități de reîmprospătare a paginii.
Răspunsul de la server poate fi nu numai XML, după cum sugerează numele tehnologiei. Pe lângă XML, puteți obține un răspuns sub formă de text simplu sau JSON (Javascript Object Notation). Dacă răspunsul a fost primit în text simplu, atunci acesta poate fi afișat imediat într-un container pe pagină. Când se primește un răspuns XML, documentul XML rezultat este de obicei procesat pe partea clientului și convertit în (X)HTML. Când primește un răspuns JSON, clientul trebuie doar să execute codul primit (funcția de eval a Javascript) pentru a obține un obiect Javascript cu drepturi depline. Dar aici trebuie să fii atent și să ții cont de faptul că codul rău intenționat poate fi transmis folosind această tehnologie, așa că înainte de a executa codul primit de la server, acesta ar trebui verificat și procesat cu atenție. Există o astfel de practică precum o solicitare „inactivă”, în care niciun răspuns nu vine de la server, doar datele de pe partea serverului sunt modificate.
În diferite browsere, acest obiect are proprietăți diferite, dar în general este același.
Metode obiect XMLHttpRequest
Rețineți că numele metodelor sunt scrise în același stil (stil Camel) ca și alte funcții Javascript. Aveți grijă când le folosiți.
intrerupere de sarcina()- anulați cererea curentă către server.
getAllResponseHeaders()- obțineți toate anteturile de răspuns de la server.
getResponseHeader ("nume_header")- obțineți titlul specificat.
deschide("request_type","URL","asincron","nume utilizator","parolă")- inițializarea cererii către server, cu specificarea metodei de solicitare. Tipul cererii și adresa URL sunt parametri obligatorii. Al treilea argument este o valoare booleană. De obicei, întotdeauna setat la adevărat sau nu este setat deloc (implicit este adevărat). Al patrulea și al cincilea argument sunt folosite pentru autentificare (este foarte nesigur să stocați datele de autentificare în script, deoarece scriptul poate fi vizualizat de orice utilizator).
trimite ("conținut")- trimiteți o cerere HTTP către server și obțineți un răspuns.
setRequestHeader("header_name","valoare")- setați valorile antetului cererii.
Proprietățile obiectului XMLHttpRequest
onreadystatechange este una dintre cele mai importante proprietăți ale obiectului XMLHttpRequest. Cu ajutorul acestei proprietăți, este setat un handler, care este apelat ori de câte ori starea obiectului se schimbă.
readyState- un număr care indică starea obiectului.
text de răspuns- reprezentarea răspunsului serverului sub formă de text simplu (șir).
răspunsXML- un obiect document compatibil cu DOM-ul primit de la server.
stare- starea răspunsului de la server.
statusText- reprezentarea textuală a stării răspunsului de la server.
Să aruncăm o privire mai atentă asupra proprietății readyState:
- 0 - Obiectul nu este inițializat.
- 1 - Obiectul încarcă date.
- 2 - Obiectul și-a încărcat datele.
- 3 - Obiectul nu este încărcat complet, dar poate fi interacționat de către utilizator.
- 4 - Obiectul este inițializat complet; a primit un răspuns de la server.
Crearea unui obiect XMLHttpRequest
După cum am menționat mai sus, crearea acestui obiect pentru fiecare tip de browser este un proces unic.
De exemplu, pentru a crea un obiect în browsere compatibile cu Gecko, Konqueror și Safari, veți folosi următoarea expresie:
VarRequest = noua XMLHttpRequest();
Și pentru Internet Explorer, se utilizează următoarele:
VarRequest = nou ActiveXObject ("Microsoft.XMLHTTP");
Var Request = nou ActiveXObject("Msxml2.XMLHTTP");
Acum, pentru a obține compatibilitatea între browsere, trebuie să adăugați toate funcțiile într-una singură:
Funcția CreateRequest() ( var Request = false; if (window.XMLHttpRequest) ( // Browsere compatibile Gecko, Safari, Konqueror Request = nou XMLHttpRequest(); ) else if (window.ActiveXObject) ( //Internet Explorer try ( Solicitare = nou ActiveXObject("Microsoft.XMLHTTP"); ) catch (CatchException) ( Solicitare = nou ActiveXObject("Msxml2.XMLHTTP"); ) ) if (!Request) ( alert("Nu se poate crea XMLHttpRequest"); ) return Request; )
După toate acestea, puteți crea acest obiect și nu vă faceți griji cu privire la performanța pe browserele populare. Dar puteți crea un obiect în locuri diferite. Dacă îl creați global, atunci la un anumit moment în timp va fi posibilă o singură solicitare către server. Puteți crea un obiect de fiecare dată când se face o solicitare către server (acest lucru va rezolva aproape complet problema).
Solicitare server
Algoritmul de solicitare a serverului arată astfel:
- Verificarea existenței XMLHttpRequest.
- Inițializarea conexiunii la server.
- Trimiterea unei cereri către server.
- Prelucrarea datelor primite.
/* Funcție pentru trimiterea unei cereri către un fișier de pe server r_method - tipul cererii: GET sau POST r_path - calea către fișierul r_args - argumente ca a=1&b=2&c=3... r_handler - funcție pentru a gestiona răspunsul de la server */ function SendRequest(r_method , r_path, r_args, r_handler) ( //Creați o cerere var Request = CreateRequest(); //Verificați dacă cererea există din nou dacă (!Request) ( return; ) //Atribuiți un handler personalizat Request.onreadystatechange = function() ( // Dacă schimbul de date este complet dacă (Request.readyState == 4) ( //Ofer controlul utilizatorului handler r_handler(Request); ) ) //Verificați dacă este necesară o cerere GET if (r_method.toLowerCase() == "get" && r_args.length > 0) r_path += "?" + r_args; //Inițializați conexiunea Request.open(r_method, r_path, true); if (r_method.toLowerCase( ) == „post”) ( //Dacă aceasta este o cerere POST //Setează antetul Request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); //Trimit m cerere Request.send(r_args); ) else ( //Dacă aceasta este o cerere GET //Trimite o cerere nulă Request.send(null); ) )
Crearea unei cereri a devenit mult mai ușoară. De exemplu, să scriem o funcție care va primi conținutul unui fișier pe server și să-l scoată într-un container.
Funcția ReadFile(nume fișier, container) ( //Creează o funcție de gestionare var Handler = function(Request) ( document.getElementById(container).innerHTML = Request.responseText; ) //Trimite cererea SendRequest("GET",filename," ", Handler); )
Așa are loc interacțiunea cu serverul.
Procesarea răspunsului
În exemplul anterior, am făcut o funcție de solicitare către server. Dar este, de fapt, nesigur, deoarece nu procesăm starea obiectului și starea răspunsului de la server.
Să adăugăm la codul nostru, astfel încât să poată afișa o notificare vizuală despre procesul de încărcare.
Request.onreadystatechange = function() ( //Daca schimbul de date este finalizat daca (Request.readyState == 4) ( //Ofer controlul utilizatorului handler r_handler(Request); ) else ( //Anuntati utilizatorul despre descărcare )) ...
După cum știți deja, obiectul XMLHttpRequest vă permite să cunoașteți starea răspunsului de la server. Să profităm de această oportunitate.
Request.onreadystatechange = function() ( //Dacă schimbul de date este finalizat dacă (Request.readyState == 4) ( dacă (Request.status == 200) ( //Transferă controlul către utilizatorul handler r_handler(Request); ) else ( // Notifică utilizatorul despre o eroare care a survenit ) ) else ( // Notifică utilizatorul despre descărcare ) ) ...
Opțiuni de răspuns ale serverului
De la server pot fi primite mai multe tipuri de date:
- text simplu
JSON este notația obiect Javascript. Cu ajutorul lui, puteți reprezenta un obiect ca șir (aici puteți desena o analogie cu funcția de serializare). Când primiți date JSON, trebuie să le executați pentru a obține un obiect Javascript cu drepturi depline și pentru a efectua operațiunile necesare asupra acestuia. Vă rugăm să rețineți că astfel de transmitere și execuție de date nu sunt sigure. Trebuie să urmăriți ceea ce se pune în execuție.
Exemplu de cod JSON:
( „date”: ( „diverse”: [ ( „nume” : „element JSON unu”, „tip” : „Subtitlu 1” ), ( „nume” : „Element JSON doi”, „tip” : „ Subtitlu 2 " ) ] ) )
La primirea unui astfel de cod, efectuăm următoarea acțiune:
var responsedata = eval ("(" + Request.responseText + ")")
După executarea acestui cod, obiectul va fi disponibil pentru dvs date de răspuns.
Lucrul cu limbaje de programare pe server
O astfel de muncă nu este diferită de cea obișnuită. De exemplu, voi lua PHP ca limbaj de pe partea serverului. Nimic nu s-a schimbat în partea clientului, dar partea serverului este acum reprezentată de un fișier PHP.
Prin tradiție, să începem cu un salut către lumea noastră minunată:
ecou „Bună ziua, lume!”;
La accesarea acestui fișier, șirul Hello, World va fi returnat clientului. După cum înțelegeți, aceasta reprezintă cele mai largi posibilități de construire a aplicațiilor. Transmițând argumente atunci când apelați serverul cu XMLHttpRequest, puteți parametriza rezultatul, oferind astfel o funcționalitate bogată aplicației Web.
În afară de PHP, poate fi folosit orice alt limbaj de programare pe partea de server.
AJAX - Ce este?
Când există puține oportunități existente și nu există loc pentru a le îmbunătăți pe cele existente, atunci are loc o descoperire tehnologică. O astfel de descoperire este AJAX (Asynchronous JavaScript and XML) - o abordare a construirii de interfețe cu utilizatorul pentru aplicații web, în care pagina web, fără a se reîncărca, încarcă ea însăși datele de care utilizatorul are nevoie. AJAX este una dintre componentele conceptului DHTML.
Ce ne oferă această tehnologie. În prezent, dezvoltarea aplicațiilor WEB tinde să facă distincția între partea client și partea server, iar acesta este motivul pentru utilizarea pe scară largă a șabloanelor precum Smarty și XSLT. Proiectele devin mai complexe acum, iar împletirea diferitelor tehnologii devine prea costisitoare pentru timpul unui dezvoltator. Deci, de exemplu, toate stilurile de formatare sunt redate în fișiere CSS sau XSL, datele HTML sau XML sunt stocate în alte secțiuni, serverele de gestionare în a treia, bazele de date în a patra. Și dacă în urmă cu 5-6 ani, aproape peste tot puteai vedea împletirea tuturor acestor lucruri într-un singur fișier, acum devine din ce în ce mai raritate.
Când se dezvoltă proiecte mai complexe, este nevoie de cod structurat și lizibil. Nu ar trebui să aruncați codul programatorului cu codul designerului de layout și codul designerului de layout cu editările designerului și așa mai departe.
Este necesar să se separe munca. Deci, de exemplu, un designer își va face treaba, un programator își va face treaba, un programator își va face treaba și, în același timp, nimeni nu va interfera unul cu celălalt. Ca urmare, fiecare participant la proiect va trebui să cunoască doar datele cu care va trebui să lucreze. În acest caz, productivitatea grupului și calitatea proiectului cresc semnificativ. În prezent, această problemă este rezolvată cu succes prin utilizarea șabloanelor, dar acest lucru creează și anumite dificultăți, deoarece pentru a, de exemplu, conecta Smarty, trebuie să conectați modulul software de procesare a șabloanelor și să îl legați clar cu structura proiectului. Dar acest lucru nu este întotdeauna posibil și necesită anumite costuri. Este puțin mai ușor când utilizați pachetul XML + XSL, deoarece oferă mai multe opțiuni, dar aceasta este o alternativă, nimic mai mult. Dar dacă privim spre ceva radical nou, care ne-ar permite să combinăm totul mai bine, folosind posibilitățile a ceea ce este? Încercați să vă imaginați un JavaScript care are toată puterea PHP sau Perl, inclusiv grafică și baze de date, care are o extensibilitate și o utilizare mult mai bună și este, de asemenea, multiplatformă.
Deci, ce este AJAX? Despre Ajax s-a vorbit pentru prima dată după articolul din februarie 2005 „Rethinking Web Applications” de Jesse James Garrett. Ajax nu este o tehnologie independentă. Aceasta este o idee bazată pe două principii principale.
Utilizarea DHTML pentru a schimba dinamic conținutul paginii.
Utilizarea XMLHttpRequest pentru a interoga serverul din mers.
Utilizarea acestor două abordări vă permite să creați interfețe de utilizator WEB mult mai convenabile pe acele pagini ale site-urilor în care este necesară interacțiunea activă a utilizatorului. Utilizarea Ajax a devenit mai populară de când Google a început să-l folosească în mod activ pe site-urile lor, cum ar fi Gmail, Google Maps și Google sugerează. Crearea acestor site-uri a confirmat eficacitatea acestei abordări.
Deci mai detaliat: dacă luăm modelul clasic de aplicație WEB:
Clientul, tastând în bara de căutare adresa resursei de interes pentru el, ajungând la server, îi face o cerere. Serverul efectuează calcule în conformitate cu cererea, accesează baza de date și așa mai departe, după care datele primite ajung la client și, dacă este necesar, sunt înlocuite în șabloane și procesate de browser. Rezultatul este pagina pe care o vedem și pe care 80% din populația țării aflată în WEB o numește Internet. Acesta este un model clasic care a reușit să se dovedească și să câștige un loc de cinste la soare. Acesta este cel mai simplu model de interacțiune și, prin urmare, cel mai comun. Cu toate acestea, devine din ce în ce mai insuficient. Imaginați-vă un joc on-line „Battleship”, care este jucat de doi prieteni inveterati - un rezident al Africii de Sud și un rezident al Japoniei. Cum să folosești un astfel de model pentru a-și face jocul cât mai plăcut cu putință? În orice caz, datele navelor scufundate vor fi stocate pe server, iar pentru a verifica dacă adversarul a fost ca, va fi necesar să actualizați pagina de fiecare dată și să îngroșați datele învechite. „Dar oamenii au venit cu stocarea în cache” - vei spune și vei avea perfectă dreptate, dar nu ușurează. Memorarea în cache va accelera doar timpul de interacțiune cu serverul, dar nu va elimina necesitatea reîncărcării paginii. Alternativ, puteți seta o anumită oră de auto-actualizare, dar în acest caz, pagina se va reîncărca complet.
Acum să ne uităm la modelul de interacțiune AJAX:
Secvența de acțiuni ale clientului este salvată și acesta, cel mai probabil, nu va înțelege ce se va întâmpla, iar cuvântul AJAX va fi asociat doar cu numele clubului de fotbal. Dar pe partea de server, lucrurile arată diferit.
La accesarea serverului se generează o pagină care va fi afișată utilizatorului și îi va oferi acestuia să efectueze succesiunea de acțiuni care îl interesează. Cu o alegere conștientă (deși nu neapărat) a clientului, solicitarea acestuia se va referi la modulul AJAX, care va efectua toate calculele care îl interesează și va lucra cu serverul ca atare. Dar care este inovația? Principala diferență este că această metodă ne oferă posibilitatea de a accesa în mod dinamic serverul și de a efectua acțiunile care ne interesează. De exemplu, trebuie să efectuăm un apel la baza de date și să obținem datele care ne interesează, pe care apoi le vom folosi. Vom stoca datele într-un fișier XML care va fi generat dinamic, astfel:
Creați un nou obiect JavaScript:
Var req = nou ActiveXObject ("Microsoft.XMLHTTP"); (pentru IE) var req = new XMLHttpRequest(); (Pentru orice altceva)
Apoi scriem o funcție folosind acest obiect
Varreq; funcția loadXMLDoc(url) ( // ramură pentru obiectul XMLHttpRequest nativ dacă (window.XMLHttpRequest) (req = nou XMLHttpRequest(); req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send( null); // ramură pentru versiunea IE/Windows ActiveX ) else if (window.ActiveXObject) (req = nou ActiveXObject ("Microsoft.XMLHTTP"); dacă (req) (req.onreadystatechange = processReqChange; req.open ("GET) ", url, adevărat); req.send(); ) ) )
În corpul fișierului HTML, scriem un script care va:
Funcția checkName(intrare, răspuns) ( if (răspuns != "")( // mesaj în modul răspuns = document.getElementById("nameCheckFailed"); if (răspuns == "1")( mesaj. className = "eroare"; )else( message.className = "ascuns"; ) )else( // Url mod de introducere = "http://localhost/xml/checkUserName.php?q=" \\ + input; loadXMLDoc(url); ) )
În fișierul localhost/xml/checkUserName.php, procesăm datele primite de la linia de comandă în acest caz în variabila q. Iar rezultatul este salvat în structura XML, care este stocată în același fișier. Deci putem primi și procesa datele primite din baza de date sau altceva de care avem nevoie. În plus, serverul va procesa doar datele pe care trebuie să le actualizăm și nu întreaga pagină dacă este reîncărcată.
Acum să revenim la doi prieteni - iubitori ai bătăliilor pe mare: având în vedere apariția acestei inovații, putem face următoarele: verificarea la fiecare trei secunde a fișierului XML, această verificare implică verificarea bazei de date pentru o nouă intrare, adică , pentru o mutare făcută de adversar. Dacă mișcarea a fost făcută, pagina scufundă navele fără a se reîncărca, stricând astfel starea de spirit a participanților la luptele pe apă. Această funcționalitate este obținută prin utilizarea elementară a Javascript și a foilor de stil. Acest exemplu este destul de clar, dar departe de a fi complet, utilizarea acestei tehnologii este mult mai semnificativă.
Cu toate acestea, nu toate sunt atât de simple. Să ne uităm acum la trăsăturile negative.
În primul rând, putem transfera date numai folosind metoda GET, așa că cantități mari de date vor trebui lăsate în pace. Această problemă a fost ridicată de mai multe ori în diverse surse, dar domnilor, există Cookie-uri care sunt destul de acceptabile în cazurile de transfer de date mari decât poate găzdui o solicitare GET, iar Javascript, la rândul său, are funcții de lucru cu ele.
A doua problemă este compatibilitatea între browsere. Obiectul XMLHttpRequest nu face parte încă din niciun standard (deși ceva similar a fost deja propus în specificația W3C DOM Level 3 Load and Save). Prin urmare, există două metode diferite pentru a apela acest obiect în codul de script. În Internet Explorer, obiectul ActiveX este invocat astfel:
Var req = nou ActiveXObject ("Microsoft.XMLHTTP");
În Mozilla și Safari, este mai ușor (pentru că este un obiect încorporat în JavaScript):
varreq = new XMLHttpRequest();
Toate browserele moderne suportă acest obiect și doar 1,8% dintre utilizatorii (conform statisticilor de la SpyLog) care folosesc versiuni foarte vechi de browsere care nu acceptă acest obiect vor avea probleme.
Și în sfârșit, securitate. Să ne oprim asupra acestui lucru mai detaliat. Principala problemă este că toate datele și codul sursă al funcțiilor JavaScript pot fi văzute prin vizualizarea codului sursă al paginii, respectiv, un atacator poate urma logica executării interogării și, în anumite circumstanțe, poate executa setul de comenzi de care are nevoie. . Acest lucru nu joacă un rol special atunci când avem o simplă potrivire a datelor, ci ce să facem în situații mai complexe, precum autorizarea și cum să transmitem parolele în acest caz. După cum am menționat mai sus, cookie-urile vin în ajutor. Datele necesare pot fi trimise cu ajutorul lor, precum și prelucrate. Să luăm un exemplu în care utilizatorul va fi autentificat folosind tehnologia căreia îi este dedicat articolul.
Generarea paginii, generăm valori unice, pe care apoi le punem în variabilele serverului. Și în cookie-urile browserului, apoi în timpul autorizării obținem numele de utilizator și parola, pe care trebuie să le transmitem modulului de procesare de pe server.
După ce utilizatorul a introdus datele și a făcut clic pe butonul Trimitere, parola sa este introdusă în Cookie-uri, iar numele de utilizator este transmis deschis - printr-un link, de exemplu http://www.mubestajax.com/ajax.php?login=pupkin la primirea datelor, serverul, în primul rând, verifică datele primite. Deoarece valorile pe care le-am generat de la pornirea serverului și apoi le-am transmis variabilelor globale ale serverului și cookie-urile trebuie să se potrivească, atunci la verificarea integrității datelor transmise, programul nu mai funcționează dacă există o nepotrivire. Dacă totul a mers bine, atunci se extrag toate datele necesare și se efectuează calculele și lucrările necesare. Această metodă de protecție este destul de simplă și eficientă. Dar pentru proiecte mari, nu este potrivit.
Când securitatea vine în prim-plan, este mai bine să folosiți soluții mai complexe și mai fiabile. Dar, în majoritatea cazurilor, aceste măsuri de precauție vor fi mai mult decât suficiente, deoarece utilizarea modulelor mai complexe implică utilizarea unor tehnologii care nu sunt întotdeauna incluse în software-ul standard al serverelor moderne, a căror caracteristică principală este simplitatea. De aceea tehnologii precum MySQL și PHP au devenit foarte răspândite. oferă ușurință în exploatare cu un consum redus de resurse și o fiabilitate suficientă. Și în cadrul acestui software, soluția propusă mai sus este cea mai potrivită.
În concluzie, aș dori să spun că AJAX, pe de o parte, reprezintă un salt uriaș în ingineria WEB, dar, pe de altă parte, este o etapă de evoluție așteptată de mult, care a deschis noi orizonturi în domeniul dezvoltării software. . În același timp, această tehnologie este încă destul de „brută”, deoarece utilizarea ei în acest moment este mai degrabă o excepție plăcută. Dar sunt sigur că toată lumea va auzi despre asta de mai multe ori.
Cele mai multe site-uri web moderne folosesc o tehnologie numită AJAX pentru a interacționa rapid și eficient cu vizitatorul. AJAX a devenit o metodă foarte populară pentru obținerea datelor de pe server în fundal și actualizarea dinamică a paginii.
Dezvoltarea codului JavaScript pentru a implementa AJAX de la zero este un proces foarte consumator de timp și plictisitor. Cu toate acestea, multe biblioteci JavaScript, inclusiv jQuery, au o implementare excelentă la nivel înalt a AJAX sub forma unui set de metode și funcții care facilitează și mai rapid construirea de site-uri web.
În această serie de tutoriale, vom acoperi elementele de bază ale construirii cererilor AJAX cu jQuery. Vor fi abordate următoarele subiecte:
- Ce este tehnologia AJAX? Cum functioneazã? Care sunt avantajele sale?
- Cum să faci diferite tipuri de solicitări AJAX cu jQuery?
- Trimiterea datelor către server folosind cereri AJAX.
- Prelucrarea și extragerea datelor din răspunsurile AJAX de pe server.
- Cum să personalizezi gestionarea AJAX a jQuery și să schimbi setările implicite?
Notă: lecțiile se concentrează pe partea JavaScript de partea clientului. Dar și dezvoltarea părții server este destul de simplă. Pentru mai multe informații, citiți materialul despre limbaje de programare pe server, cum ar fi PHP.
Ce este AJAX și de ce este util?
AJAX este o tehnică de dezvoltare a aplicațiilor web în care codul JavaScript care se execută în browserul vizitatorului comunică cu un server web în mod asincron, adică în fundal. Diferența față de aplicațiile web obișnuite este următoarea:
- Pagina web obișnuită conține link-uri sau formulare care, atunci când sunt făcute clic sau trimise, fac o solicitare către o nouă adresă URL de pe serverul web. Serverul trimite o pagină HTML complet nouă, pe care browserul o redă apoi, înlocuind pagina originală. Această abordare necesită mult timp și are un efect negativ asupra vizitatorului, deoarece acesta trebuie să aștepte să se încarce o nouă pagină.
- Când utilizați tehnologia AJAX, Codul JavaScript face o cerere către o adresă URL de pe server. Codul poate trimite și date împreună cu cererea. Codul JavaScript procesează apoi răspunsul serverului și acționează în consecință. De exemplu, se pot face calcule cu datele returnate, se poate adăuga sau actualiza un widget pe pagină, se emite un mesaj către vizitator despre actualizarea bazei de date pe server.
Deoarece cererea AJAX rulează în fundal, codul JavaScript (și vizitatorul) pot continua să lucreze pe pagină în timp ce cererea este procesată. Procesul este ascuns vizitatorului, care nu trebuie să părăsească pagina pe care o vizualizează în prezent. Această abordare face ca paginile AJAX să fie foarte plăcute de lucrat.
Punctul fundamental al AJAX este obiectul JavaScript XMLHttpRequest. Oferă o serie de metode precum open() , send() și onreadystatechange() care pot fi utilizate atunci când se trimit cereri AJAX către server și se procesează răspunsurile în fundal.
Dezvoltarea codului JavaScript AJAX pe mai multe browsere poate fi un proces destul de obositor. Din fericire, jQuery vă oferă câteva metode AJAX ușor de utilizat, care vă permit să abstrageți o mulțime de operațiuni de nivel scăzut.
Pentru cei mai curioși, cuvântul AJAX este o abreviere a primelor litere ale expresiei în limba engleză " A sincron J avascript A nd X ML" (Asynchronous JavaScript and XML). Cu toate acestea, termenul poate induce în eroare - cererea nu trebuie să fie asincronă și nu trebuie să folosească XML pentru a trimite datele.
Efectuarea unei cereri GET cu $.get()
Metoda jQuery $.get() oferă o modalitate ușoară și convenabilă de a face o cerere simplă AJAX. Ea face cererea folosind metoda HTTP GET (folosită pentru a obține adrese URL, cum ar fi pagini și imagini) în loc de metoda POST (care este folosită în mod tradițional pentru a trimite datele din formular).
În forma sa cea mai simplă, puteți apela o metodă ca aceasta:
Unde url este adresa URL a resursei de la care se așteaptă răspunsul. Acesta este de obicei un script pe partea de server care efectuează o anumită acțiune și poate returna unele date:
$.get("http://example.com/getForecast.php");
Deși puteți solicita și un document static:
$.get("http://example.com/mypage.html");
Când solicitați o adresă URL, puteți trimite date împreună cu solicitarea. Puteți transmite date în șirul de interogare, la fel cum ați face cu o solicitare normală GET:
$.get("http://example.com/getForecast.php?city=rome&date=20120318");
Este corect să faceți același lucru prin trecerea obiectului de date ca al doilea parametru la metoda $.get(). Obiectul de date trebuie să conțină informații sub formă de perechi nume de proprietate/valoare de proprietate. De exemplu:
var data = ( oras: "roma", data: "20120318" ); $.get("http://example.com/getForecast.php", date);
Alternativ, puteți trece datele metodei $.get() ca șir:
Var date = "city=rome&date=20120318"; $.get("http://example.com/getForecast.php", date);
Obținerea datelor de pe server
Până acum, ne-am uitat doar la exemple de utilizare a $.get() pentru a trimite cereri către server, ignorând orice răspuns pe care l-ar putea genera un script pe partea de server. Dar, în cele mai multe cazuri, codul JavaScript va aștepta un răspuns de la un script de pe partea serverului și va procesa datele primite.
O solicitare AJAX este asincronă, ceea ce înseamnă că rulează în fundal în timp ce restul codului JavaScript încă rulează. Cum, atunci, să primiți un răspuns de la server când solicitarea este finalizată?
Trebuie să scrii funcția de întoarcere, care va fi executat automat când cererea AJAX se finalizează și serverul trimite un răspuns. Cel puțin, funcția dvs. trebuie să ia datele returnate de server ca prim argument:
Funcția myCallback(returnedData) ( // Efectuați prelucrarea datelor returnedData )
Odată ce funcția de apel invers a fost creată, o puteți trece ca al treilea argument la metoda $.get():
var data = ( oras: "roma", data: "20120318" ); $.get("http://example.com/getForecast.php", date, myCallback);
Determinarea tipului de date de răspuns
De obicei, partea de server transmite date într-unul dintre mai multe formate comune, inclusiv XML , JSON , JavaScript sau HTML. În mod implicit, jQuery încearcă să determine cel mai potrivit format și să analizeze datele în consecință. Dar este mai bine să definiți în mod explicit formatul.
Pentru a specifica formatul, al patrulea argument trebuie trecut la metoda $.get(). Acest argument poate fi un șir din următoarea listă:
- "xml"
- "json"
- "scriptie"
- "html"
De exemplu, dacă știți că scriptul serverului returnează date în format JSON, atunci apelați metoda $.get() astfel:
$.get("http://example.com/getForecast.php", date, myCallback, "json");
Un exemplu de utilizare a metodei $.get().
Iată un exemplu de creare a unei cereri AJAX utilizând metoda $.get() și gestionarea simplă a răspunsului. Pentru ca exemplul să funcționeze, trebuie să creați un fișier text simplu pe serverul numit getForecast.txt, care să conțină următorul text:
( „oraș”: „Vasyuki”, „data”: „18 martie 2012”, „prognoză”: „Race și nămol”, „maxTemp”: +1)
Acest fișier va imita un răspuns JSON care ar fi putut fi generat de un script de prognoză meteo pe server.
Apoi creăm pagina showForecast.html în același folder ca getForecast.txt: