AJAX është një akronim që qëndron për Javascript asinkron dhe XML. Në fakt, AJAX nuk është një teknologji e re, pasi Javascript dhe XML kanë qenë rreth e rrotull për shumë kohë, dhe AJAX është një sintezë e këtyre teknologjive. AJAX lidhet më shpesh me termin Web 2.0 dhe shpallet si aplikacioni më i ri i Uebit.
Me AJAX, nuk ka nevojë të rifreskoni të gjithë faqen çdo herë, pasi përditësohet vetëm një pjesë specifike e saj. Është shumë më i përshtatshëm, pasi nuk duhet të prisni gjatë, dhe më ekonomik, pasi jo të gjithë kanë internet të pakufizuar. Vërtetë, në këtë rast, zhvilluesi duhet të sigurohet që përdoruesi është i vetëdijshëm për atë që po ndodh në faqe. Kjo mund të bëhet duke përdorur tregues të ngarkimit, mesazhe me tekst që tregojnë se të dhënat po shkëmbehen me serverin. Duhet të kuptohet gjithashtu se jo të gjithë shfletuesit mbështesin AJAX (versionet më të vjetra të shfletuesve dhe shfletuesve të tekstit). Plus Javascript mund të çaktivizohet nga përdoruesi. Prandaj, nuk duhet të abuzoni me përdorimin e teknologjisë dhe të përdorni metoda alternative të paraqitjes së informacionit në faqen e internetit.
Për të përmbledhur përfitimet e AJAX:
- Aftësia për të krijuar një ndërfaqe të përshtatshme në internet
- Ndërveprimi aktiv i përdoruesit
- Komoditeti i përdorimit
Shkëmbimi i të dhënave
Për të shkëmbyer të dhëna, në faqe duhet të krijohet një objekt XMLHttpRequest, i cili është një lloj ndërmjetësi midis shfletuesit të përdoruesit dhe serverit (Fig. 1). Duke përdorur XMLHttpRequest, ju mund të dërgoni një kërkesë në server, si dhe të merrni një përgjigje në formën e llojeve të ndryshme të të dhënave.
Ka dy mënyra për të shkëmbyer të dhëna me serverin. Mënyra e parë është një kërkesë GET. Në këtë kërkesë, ju aksesoni një dokument në server duke i kaluar atij argumente nëpërmjet vetë URL-së. Në këtë rast, nga ana e klientit, do të jetë logjike të përdoret funksioni i escape Javascript në mënyrë që disa të dhëna të mos ndërpresin kërkesën.
Pjesa e klientit, e shkruar në Javascript, duhet të ofrojë funksionalitetin e nevojshëm për të komunikuar në mënyrë të sigurt me serverin dhe të sigurojë metoda për shkëmbimin e të dhënave në ndonjë nga mënyrat e mësipërme. Ana e serverit duhet të përpunojë të dhënat hyrëse dhe në bazë të tyre të gjenerojë informacione të reja (për shembull, duke punuar me një bazë të dhënash) dhe t'ia kthejë atë klientit. Për shembull, për të kërkuar informacion nga serveri, mund të përdorni një kërkesë të rregullt GET me transferimin e disa parametrave dhe të madhësisë së vogël, dhe për të përditësuar informacionin ose për të shtuar informacione të reja, do t'ju duhet të përdorni një kërkesë POST, pasi kjo lejon ju për të transferuar sasi të mëdha të dhënash.
Siç u tha tashmë, AJAX përdor transferimin asinkron të të dhënave. Kjo do të thotë që ndërsa transferimi i të dhënave është në proces, përdoruesi mund të kryejë veprime të tjera që i nevojiten. Në këtë kohë, ju duhet të njoftoni përdoruesin se një lloj shkëmbimi i të dhënave është në proces, përndryshe përdoruesi do të mendojë se diçka ka ndodhur gabim dhe mund të largohet nga faqja, ose të rithirrë funksionin, i cili, sipas mendimit të tij, është ". i ngrirë". Tregimi gjatë shkëmbimit të të dhënave në një aplikacion Web 2.0 luan një rol shumë të rëndësishëm: vizitorët mund të mos jenë mësuar ende me këtë mënyrë të rifreskimit të faqes.
Përgjigja nga serveri mund të jetë jo vetëm XML, siç sugjeron emri i teknologjisë. Përveç XML, ju mund të merrni një përgjigje në tekst të thjeshtë, ose JSON (Javascript Object Notation). Nëse përgjigja është marrë në tekst të thjeshtë, atëherë ajo mund të shfaqet menjëherë në një enë në faqe. Kur merret një përgjigje XML, dokumenti XML që rezulton zakonisht përpunohet në anën e klientit dhe të dhënat konvertohen në (X) HTML. Kur merr një përgjigje JSON, klienti duhet vetëm të ekzekutojë kodin e marrë (funksioni eval i Javascript) për të marrë një objekt të plotë Javascript. Por këtu duhet të jeni të kujdesshëm dhe të merrni parasysh faktin se duke përdorur këtë teknologji, kodi me qëllim të keq mund të transmetohet, prandaj, përpara se të ekzekutoni kodin e marrë nga serveri, ai duhet të kontrollohet dhe përpunohet me kujdes. Ekziston një praktikë e tillë si një kërkesë "dummy", në të cilën nuk merret asnjë përgjigje nga serveri, por ndryshohen vetëm të dhënat në anën e serverit.
Ky objekt ka veti të ndryshme në shfletues të ndryshëm, por në përgjithësi është i njëjtë.
Metodat e objektit të kërkesës XMLHttp
Vini re se emrat e metodave janë shkruar në të njëjtin stil Camel si funksionet e tjera Javascript. Kini kujdes kur i përdorni.
abort ()- anulimi i kërkesës aktuale në server.
getAllResponseHeaders ()- merrni të gjitha titujt e përgjigjeve nga serveri.
getResponseHeader ("emri_header")- merrni titullin e specifikuar.
hapur ("lloj_kërkese", "url", "asinkron", "emri i përdoruesit", "fjalëkalimi")- inicializimi i një kërkese në server, një tregues i metodës së kërkesës. Lloji i kërkesës dhe URL-ja janë parametra të kërkuar. Argumenti i tretë është një vlerë boolean. Zakonisht ajo specifikohet gjithmonë si e vërtetë ose nuk specifikohet fare (parazgjedhja është e vërtetë). Argumenti i katërt dhe i pestë përdoren për vërtetim (është shumë e pasigurt të ruash të dhënat e vërtetimit në një skript, pasi çdo përdorues mund ta shikojë skriptin).
dërgo ("përmbajtje")- dërgoni një kërkesë HTTP në server dhe merrni një përgjigje.
setRequestHeader ("emri_header", "vlera")- vendosni vlerat e kokës së kërkesës.
Vetitë e objektit XMLHttpRequest
në gjendje të gatshme ndryshimështë një nga vetitë më të rëndësishme të objektit XMLHttpRequest. Me ndihmën e kësaj vetie vendoset një mbajtës, i cili thirret sa herë që ndryshon statusi i një objekti.
shtet i gatshëm- një numër që tregon statusin e objektit.
Teksti i përgjigjes- prezantimi i përgjigjes së serverit në formën e tekstit të thjeshtë (string).
përgjigjeXML- një objekt dokumenti në përputhje me DOM i marrë nga serveri.
statusi- gjendja e përgjigjes nga serveri.
statusTeksti- paraqitje tekstuale e gjendjes së përgjigjes nga serveri.
Ju duhet të shikoni më nga afër pronën ReadState:
- 0 - Objekti nuk është inicializuar.
- 1 - Objekti po ngarkon të dhënat.
- 2 - Objekti ka ngarkuar të dhënat e tij.
- 3 - Objekti nuk është i ngarkuar plotësisht, por mund të ndërveprojë me përdoruesin.
- 4 - Objekti është inicializuar plotësisht; mori një përgjigje nga serveri.
Krijimi i një objekti XMLHttpRequest
Siç u përmend më lart, krijimi i këtij objekti për çdo lloj shfletuesi është një proces unik.
Për shembull, për të krijuar një objekt në shfletuesit e përputhshëm me Gecko, Konqueror dhe Safari, do të përdorni shprehjen e mëposhtme:
Var Kërkesë = ri XMLHttpRequest ();
Dhe për Internet Explorer, përdoret sa vijon:
Var Kërkesë = i ri ActiveXObject ("Microsoft.XMLHTTP");
Var Kërkesë = i ri ActiveXObject ("Msxml2.XMLHTTP");
Tani, për të arritur përputhshmërinë e ndër-shfletuesve, duhet të shtoni të gjitha funksionet në një:
Funksioni CreateRequest () (var Kërkesë = false; nëse (window.XMLHttpRequest) (// Shfletues të përputhshëm Gecko, Safari, Konqueror Request = XMLHttpRequest i ri ();) tjetër nëse (window.ActiveXObject) (// Provoni Internet Explorer (Kërkesë = i ri ActiveXObject ("Microsoft.XMLHTTP");) catch (CatchException) (Kërkesë = i ri ActiveXObject ("Msxml2.XMLHTTP");)) nëse (! Kërkesë) (lajmërim ("Nuk mund të krijohet XMLHttpRequest");) Kërkesë për kthim; )
Pas gjithë kësaj, ju mund ta krijoni këtë objekt dhe mos u shqetësoni për performancën në shfletuesit e njohur. Por ju mund të krijoni një objekt në vende të ndryshme. Nëse e krijoni globalisht, atëherë në një moment të caktuar kohor do të jetë e mundur vetëm një kërkesë për serverin. Është e mundur të krijohet një objekt sa herë që ka një kërkesë në server (kjo do ta zgjidhë pothuajse plotësisht problemin).
Kërkesa e serverit
Algoritmi për të kërkuar serverin duket si ky:
- Kontrollimi për ekzistencën e XMLHttpRequest.
- Inicializimi i lidhjes me serverin.
- Dërgimi i një kërkese në server.
- Përpunimi i të dhënave të marra.
/ * Funksioni për dërgimin e një kërkese në një skedar në server r_method - lloji i kërkesës: GET ose POST r_path - rruga drejt një skedari r_args - argumentet e formës a = 1 & b = 2 & c = 3 ... r_handler - funksioni që trajton një përgjigje nga serveri * / funksioni SendRequest (r_method , r_path, r_args, r_handler) (// Krijo një kërkesë var Kërkesë = CreateRequest (); // Kontrollo përsëri ekzistencën e kërkesës nëse (! Kërkesë) (kthim; ) // Cakto një mbajtës të personalizuar Request.onreadystatechange = funksion () (// Nëse shkëmbimi i të dhënave është i plotë nëse (Request.readyState == 4) (// Transfero kontrollin te mbajtësi i përdoruesit r_handler (Kërkesë);)) // Kontrollo nëse kërkohet një kërkesë GET nëse (r_method.toLowerCase () == "get" && r_args.length> 0) r_path + = "?" + r_args; // Inicializoni lidhjen Request.open (r_method, r_path, true); if (r_method.toLowerCase () == "post") (// Nëse kjo është kërkesë POST // Vendosni Request.setRequestHeader ("Content-Type", "application / x-www-form-urlencoded; charset = utf -8"); // Dërgo m kërkesë Kërkesë.dërgoj (r_args); ) ndryshe (// Nëse kjo është një kërkesë GET // Dërgo një kërkesë null Kërkesë. dërgo (null);))
Është bërë shumë më e lehtë për të krijuar një kërkesë. Për shembull, le të shkruajmë një funksion që do të marrë përmbajtjen e një skedari në server dhe do ta nxjerrë atë në një kontejner.
Funksioni ReadFile (emri i skedarit, kontejneri) (// Krijo një funksion mbajtës var Handler = funksion (Kërkesë) (document.getElementById (container) .innerHTML = Request.responseText;) // Dërgo një kërkesë SendRequest ("GET", emri i skedarit, " ", Trajtues);)
Kështu ndodh ndërveprimi me serverin.
Trajtimi i përgjigjes
Në shembullin e mëparshëm, ne bëmë një funksion të kërkesës së serverit. Por në fakt është e pasigurt, pasi ne nuk e përpunojmë gjendjen e objektit dhe gjendjen e përgjigjes nga serveri.
Le të përditësojmë kodin tonë në mënyrë që të mund të shfaqë një njoftim vizual për procesin e ngarkimit.
Request.onreadystatechange = funksion () (// Nëse shkëmbimi i të dhënave është i plotë nëse (Request.readyState == 4) (// Transferoni kontrollin te mbajtësi i përdoruesit r_handler (Kërkesë);) tjetër (// Njoftoni përdoruesin për ngarkimin)) ...
Siç e dini tashmë, objekti XMLHttpRequest ju lejon të dini statusin e përgjigjes nga serveri. Le ta shfrytëzojmë këtë mundësi.
Request.onreadystatechange = funksion () (// Nëse shkëmbimi i të dhënave është i plotë nëse (Request.readyState == 4) (if (Request.status == 200) (// Transfero kontrollin te mbajtësi i përdoruesit r_handler (Kërkesë);) tjetër (// Njoftoni përdoruesin për gabimin)) tjetër (// Njoftoni përdoruesin për shkarkimin)) ...
Opsionet e përgjigjes së serverit
Nga serveri mund të merren disa lloje të dhënash:
- Teksti i thjeshtë
Jsonështë shënimi i objektit Javascript. Mund të përdoret për të përfaqësuar një objekt si një varg (këtu është një analogji me një funksion serializimi). Kur merrni të dhëna JSON, duhet t'i ekzekutoni ato për të marrë një objekt Javascript të plotë dhe për të kryer operacionet e nevojshme në të. Ju lutemi, kini parasysh se një transmetim dhe ekzekutim i tillë i të dhënave nuk është i sigurt. Ju duhet të mbani gjurmët e asaj që vjen për ekzekutim.
Shembull i kodit JSON:
("të dhënat": ("misc": [("emri": "artikull JSON një", "lloji": "Nëntitulli 1"), ("emri": "artikull JSON dy", "lloji": " nëntitulli 2 ")]))
Pas marrjes së një kodi të tillë, ne kryejmë veprimin e mëposhtëm:
Var Response Data = eval ("(" + Request.responseText + ")")
Pas ekzekutimit të këtij kodi, objekti do të jetë i disponueshëm për ju të dhënat e përgjigjes.
Puna me gjuhë programimi nga ana e serverit
Kjo lloj pune nuk ndryshon nga ajo e zakonshme. Për shembull, unë do të marr PHP si gjuhë të serverit. Asgjë nuk ka ndryshuar në anën e klientit, por ana e serverit tani përfaqësohet nga një skedar PHP.
Sipas traditës, le të fillojmë duke përshëndetur botën tonë të mrekullueshme:
Jehonë "Përshëndetje, Botë!";
Kur aksesohet ky skedar, klienti do të kthejë vargun Hello, World. Siç mund ta imagjinoni, kjo paraqet mundësitë më të gjera për ndërtimin e aplikacioneve. Duke kaluar argumente kur thirrni serverin duke përdorur XMLHttpRequest, mund të parametrizoni daljen, duke ofruar kështu funksionalitet të pasur për aplikacionin tuaj në ueb.
Përveç PHP, ju mund të përdorni çdo gjuhë tjetër programimi nga ana e serverit.
AJAX - Çfarë është ajo?
Kur mundësitë ekzistuese bëhen të pakta dhe nuk ka ku të përmirësohet ajo ekzistuese, atëherë ndodh një përparim teknologjik. Një zbulim i tillë është AJAX (JavaScript asinkron dhe XML) - një qasje për ndërtimin e ndërfaqeve të përdoruesit për aplikacionet në ueb, në të cilat një faqe ueb, pa ringarkim, ngarkon të dhënat që i nevojiten përdoruesit. AJAX është një nga komponentët e konceptit DHTML.
Çfarë na jep kjo teknologji? Aktualisht, zhvillimi i aplikacioneve WEB tenton të bëjë dallimin midis anës së klientit dhe anës së serverit, dhe kjo është arsyeja e përdorimit të gjerë të shablloneve si Smarty dhe XSLT. Tani projektet po bëhen më komplekse dhe ndërthurja e teknologjive të ndryshme po bëhet shumë e shtrenjtë për kohën e zhvilluesit. Kështu, për shembull, të gjitha stilet e formatimit kryhen në skedarët CSS ose XSL, të dhënat HTML ose XML ruhen në seksione të tjera, mbajtësit e serverëve në të tretën, bazat e të dhënave në të katërtin. Dhe nëse 5-6 vjet më parë pothuajse kudo mund të shihje gërshetim të gjithë kësaj në një skedar, tani ajo po bëhet gjithnjë e më e rrallë.
Kur zhvillohen projekte më komplekse, ekziston nevoja për strukturim dhe lexueshmëri të kodit. Ju nuk duhet të mbushni kodin e programuesit me kodin e projektuesit të faqosjes, dhe kodin e projektuesit të paraqitjes me modifikimet e projektuesit, e kështu me radhë.
Duhet të diferencohet puna. Kështu, për shembull, projektuesi do të bëjë punën e tij, projektuesi i faqosjes të tijën, programuesi të tijën, dhe askush nuk do të ndërhyjë me njëri-tjetrin. Si rezultat, çdo pjesëmarrës i projektit do të duhet vetëm të dijë të dhënat me të cilat do të duhet të punojë. Në këtë rast, produktiviteti i grupit dhe cilësia e projektit rriten ndjeshëm. Aktualisht, ky problem zgjidhet me sukses duke përdorur shabllone, por kjo gjithashtu krijon vështirësi të caktuara, pasi që, të themi, të lidhni Smarty, është e nevojshme të lidhni modulin e softuerit të përpunimit të shabllonit dhe ta lidhni atë qartë me strukturën e projektit. Dhe kjo nuk është gjithmonë e mundur dhe kërkon kosto të caktuara. Është pak më e lehtë kur përdorni paketat XML + XSL pasi ato ofrojnë më shumë opsione, por kjo është një alternativë, asgjë më shumë. Po sikur të shikoni drejt diçkaje rrënjësisht të re, e cila do t'ju mundësonte të kombinoni gjithçka më mirë, duke përdorur mundësitë e asaj që është? Mundohuni të imagjinoni JavaScript, i cili ka të gjitha aftësitë e PHP ose Perl, duke përfshirë grafika dhe bazat e të dhënave, i cili është shumë më i zgjerueshëm dhe i përdorshëm, dhe është gjithashtu ndër-platformë.
Pra, çfarë është saktësisht AJAX? Ajax u fol për herë të parë pas artikullit të shkurtit 2005 nga Jesse James Garrett "Një qasje e re ndaj aplikacioneve në ueb". Ajax nuk është një teknologji më vete. Kjo është një ide e bazuar në dy parime kryesore.
Përdorimi i DHTML për të ndryshuar në mënyrë dinamike përmbajtjen e faqes.
Përdorimi i XMLHttpRequest për të hyrë në server në fluturim.
Përdorimi i këtyre dy qasjeve ju lejon të krijoni ndërfaqe shumë më të përshtatshme për përdoruesit në WEB në ato faqe të sajteve ku kërkohet ndërveprimi aktiv i përdoruesit. Përdorimi i Ajax është bërë më i popullarizuar pasi Google filloi ta përdorë atë në mënyrë aktive në krijimin e faqeve të tyre, si Gmail, Google Maps dhe Google sugjeron. Krijimi i këtyre vendeve ka konfirmuar efektivitetin e kësaj qasjeje.
Pra, më në detaje: nëse merrni modelin klasik të një aplikacioni WEB:
Klienti, duke shtypur adresën e burimit me interes për të në shiritin e kërkimit, shkon te serveri dhe i bën një kërkesë. Serveri kryen llogaritjet në përputhje me kërkesën, hyn në bazën e të dhënave, e kështu me radhë, pas së cilës të dhënat e marra shkojnë te klienti dhe, nëse është e nevojshme, zëvendësohen në shabllone dhe përpunohen nga shfletuesi. Rezultati është faqja që ne shohim dhe të cilën 80% e popullsisë së vendit në WEB e quajnë internet. Ky është një model klasik që ka arritur të provojë veten dhe të fitojë një vend nderi në diell. Ky është modeli më i thjeshtë i ndërveprimit dhe, si pasojë, më i përhapuri. Megjithatë, ajo po bëhet gjithnjë e më e pamjaftueshme. Imagjinoni lojën on-line "Beteja e Detit", e cila luhet nga dy miq të thekur - një banor i Afrikës së Jugut dhe një banor i Japonisë. Si mund ta bëni lojën e tyre sa më të këndshme duke përdorur një model të tillë? Në çdo rast, të dhënat e anijeve të mbytura do të ruhen në server dhe për të kontrolluar nëse kundërshtari nuk i pëlqen, do të jetë e nevojshme të rifreskoni faqen çdo herë dhe të përditësoni të dhënat e vjetruara. "Por njerëzit shpikën caching" - thoni ju dhe do të keni absolutisht të drejtë, por kjo nuk e bën më të lehtë. Memoria e memories vetëm do të përshpejtojë kohën e ndërveprimit me serverin, por nuk do të eliminojë nevojën për të ringarkuar faqen. Përndryshe, mund të caktoni një kohë të caktuar të rifreskimit, por në këtë rast, faqja do të ringarkohet plotësisht.
Tani le të shohim modelin e ndërveprimit AJAX:
Sekuenca e veprimeve të klientit ruhet dhe ai, ka shumë të ngjarë, nuk do të kuptojë se çfarë do të ndodhë, dhe fjala AJAX do të lidhet vetëm me emrin e klubit të futbollit. Por gjërat duken ndryshe nga ana e serverit.
Kur kontaktoni serverin, krijohet një faqe që do t'i shfaqet përdoruesit dhe do t'i ofrohet atij të kryejë sekuencën e veprimeve për të cilat ai është i interesuar. Me një zgjedhje të vetëdijshme (edhe pse jo të nevojshme) të një klienti, kërkesa e tij do t'i referohet modulit AJAX, i cili do të kryejë të gjitha llogaritjet me interes për të dhe do të punojë me serverin si i tillë. Por cila është risia? Dallimi kryesor është se kjo metodë na lejon të aksesojmë në mënyrë dinamike serverin dhe të kryejmë veprimet me interes për ne. Për shembull, duhet të hyjmë në bazën e të dhënave dhe të marrim të dhënat që na interesojnë, të cilat më pas do t'i përdorim. Ne do t'i ruajmë të dhënat në një skedar XML që do të gjenerohet në mënyrë dinamike, kështu:
Krijo një objekt të ri JavaScript:
Var req = ActiveXObject i ri ("Microsoft.XMLHTTP"); (për IE) var req = new XMLHttpRequest (); (Për çdo gjë tjetër)
Pastaj shkruajmë një funksion duke përdorur këtë objekt
Var req; funksioni loadXMLDoc (url) (// dega për objektin vendas XMLHttpRequest if (window.XMLHttpRequest) (req = XMLHttpRequest i ri (); req.onreadystatechange = processReqChange; req.hap ("GET", url, e vërtetë); req.send ( null); // degë për versionin IE / Windows ActiveX) tjetër nëse (window.ActiveXObject) (req = ActiveXObject i ri ("Microsoft.XMLHTTP"); nëse (req) (req.onreadystatechange = processReqChange; req.hapur ("GET ", url, e vërtetë); kërko. dërgo ();)))
Në trupin e skedarit HTML, shkruani një skript që do të:
Emri i kontrollit të funksionit (hyrja, përgjigja) (nëse (përgjigja! = "") (// Mesazhi i modalitetit të përgjigjes = document.getElementById ("nameCheckFailed"); if (përgjigja == "1") (message.className = "gabim"; ) else (message.className = "i fshehur";)) else (// url i modalitetit të hyrjes = "http: //localhost/xml/checkUserName.php? q = \\ + hyrje; loadXMLDoc (url);))
Në skedarin localhost / xml / checkUserName.php, ne përpunojmë të dhënat e marra nga linja e komandës në këtë rast në variablin q. Dhe ne e ruajmë rezultatin në një strukturë XML, të cilën e ruajmë në të njëjtin skedar. Pra, ne mund të marrim dhe përpunojmë të dhënat e marra nga baza e të dhënave, ose çdo gjë tjetër që na nevojitet. Përveç kësaj, serveri do të përpunojë vetëm të dhënat që duhet të përditësojmë, dhe jo të gjithë faqen nëse ngarkohet përsëri.
Tani kthehemi te dy miqtë tanë - adhurues të luftimeve detare: duke pasur parasysh pamjen e kësaj risie, mund të bëjmë sa më poshtë: të vendosim një kontroll çdo tre sekonda të skedarit XML, ky kontroll nënkupton kontrollimin e bazës së të dhënave për një rekord të ri, që është, lëvizja e bërë nga kundërshtari. Nëse lëvizja është bërë, faqja fundos anijet pa ringarkuar, duke prishur kështu disponimin e pjesëmarrësve në betejat e ujit. Ky funksionalitet arrihet duke përdorur thjesht Javascript dhe fletë stilesh. Ky shembull është mjaft ilustrues, por larg të qenit i plotë, aplikimi i kësaj teknologjie është shumë më domethënës.
Megjithatë, jo gjithçka kaq e thjeshtë. Le të shohim tani tiparet negative.
Së pari, ne mund të transferojmë të dhëna vetëm duke përdorur metodën GET; prandaj, sasi të mëdha të dhënash do të duhet të lihen vetëm. Ky problem është ngritur tashmë më shumë se një herë në burime të ndryshme, por zotërinj, ka cookie që janë mjaft të pranueshme në rastet e transferimit të të dhënave të mëdha, të cilat mund të akomodojnë një kërkesë GET dhe Javascript, nga ana tjetër, ka funksione për të punuar me to.
Problemi i dytë është përputhshmëria e ndër-shfletuesve. Objekti XMLHttpRequest nuk është ende pjesë e ndonjë standardi (megjithëse diçka e ngjashme tashmë është propozuar në specifikimin e ngarkimit dhe ruajtjes së nivelit 3 të W3C DOM). Prandaj, ekzistojnë dy metoda të ndryshme për thirrjen e këtij objekti në kodin e skriptit. Në Internet Explorer, një objekt ActiveX thirret si kjo:
Var req = ActiveXObject i ri ("Microsoft.XMLHTTP");
Në Mozilla dhe Safari, kjo është më e lehtë (pasi është një objekt i ngulitur në JavaScript):
Var req = ri XMLHttpRequest ();
Të gjithë shfletuesit modernë e mbështesin këtë objekt dhe vetëm 1.8% e përdoruesve (sipas statistikave nga SpyLog) që përdorin versione shumë të vjetra të shfletuesve që nuk e mbështesin këtë objekt do të kenë probleme.
Dhe së fundi, siguria. Le të ndalemi në këtë në më shumë detaje. Problemi kryesor është se të gjitha të dhënat dhe kodi burimor i funksioneve JavaScript mund të shihen duke parë kodin burimor të faqes; në përputhje me rrethanat, një sulmues mund të gjurmojë logjikën e ekzekutimit të kërkesës dhe, në një grup të caktuar rrethanash, të ekzekutojë grupin. të komandave që i duhen. Kjo nuk luan një rol të veçantë kur kemi një krahasim të thjeshtë të të dhënave, por çfarë të bëjmë në situata më komplekse, për shembull, gjatë autorizimit dhe si, në këtë rast, të kalojmë fjalëkalimet. Siç u përmend më lart, Cookies vijnë në shpëtim. Të dhënat e nevojshme mund të dërgohen me ndihmën e tyre, si dhe të përpunohen. Le të marrim një shembull në të cilin një përdorues do të vërtetohet duke përdorur teknologjinë për të cilën bëhet fjalë.
Duke gjeneruar faqen, ne formojmë vlera unike, të cilat më pas i vendosim në variablat e serverit. Dhe në "Cookies" të shfletuesit, më pas me autorizimin, marrim emrin e përdoruesit dhe fjalëkalimin e tij, të cilat duhet t'i transferojmë në modulin e përpunimit në server.
Pasi përdoruesi të ketë futur të dhënat dhe të shtypë butonin Submit, fjalëkalimi i tij futet në Cookies dhe emri i përdoruesit transmetohet hapur - me një lidhje për shembull http://www.mubestajax.com/ajax.php?login=pupkin kur merr të dhëna, serveri para së gjithash verifikon të dhënat e marra. Meqenëse vlerat që kemi gjeneruar që nga fillimi i punës së serverit dhe më pas i kemi transferuar në variablat e serverit global dhe cookies duhet të përputhen, atëherë kur kontrolloni integritetin e të dhënave të transmetuara, nëse ka një mospërputhje, programi ndalon së punuari. Nëse gjithçka shkoi mirë, atëherë nxirren të gjitha të dhënat e nevojshme dhe kryhen llogaritjet dhe puna e nevojshme. Kjo metodë e mbrojtjes është mjaft e thjeshtë dhe efektive. Por për projekte të mëdha, nuk do të funksionojë.
Kur siguria vjen e para, është më mirë të përdorni zgjidhje më të sofistikuara dhe të besueshme. Por në shumicën e rasteve, këto masa paraprake do të jenë më se të mjaftueshme, pasi përdorimi i moduleve më komplekse përfshin përdorimin e teknologjive që nuk përfshihen gjithmonë në softuerin standard të serverëve modernë, tipari kryesor i të cilave është thjeshtësia. Kjo është arsyeja pse teknologjitë si MySQL dhe PHP janë bërë shumë të përhapura që nga ajo kohë ato ofrojnë lehtësi operimi me konsumin e tyre të ulët të burimeve dhe besueshmërinë e mjaftueshme. Dhe brenda kornizës së këtij softueri, zgjidhja e propozuar më sipër është më e përshtatshme.
Si përfundim, dua të them se AJAX, nga njëra anë, është një hap i madh në inxhinierinë WEB, por nga ana tjetër, është një fazë evolucioni e vonuar prej kohësh që hapi horizonte të reja në fushën e zhvillimit të softuerit. . Në të njëjtën kohë, kjo teknologji është ende mjaft "e lagësht", pasi përdorimi i saj për momentin është një përjashtim i këndshëm. Por jam i sigurt se të gjithë do të dëgjojnë për të më shumë se një herë.
Shumica e faqeve moderne të internetit përdorin një teknologji të quajtur AJAX për të bashkëvepruar me vizitorin shpejt dhe me efikasitet. AJAX është bërë një teknikë shumë e njohur për marrjen e të dhënave nga një server në sfond dhe rifreskimin dinamik të një faqeje.
Zhvillimi i kodit JavaScript për të zbatuar AJAX nga e para është një proces shumë i mundimshëm dhe i mundimshëm. Megjithatë, shumë biblioteka JavaScript, duke përfshirë jQuery, kanë zbatime të shkëlqyera të nivelit të lartë AJAX si një grup metodash dhe funksionesh që e bëjnë ndërtimin e faqeve të internetit më të lehtë dhe më të shpejtë.
Në këtë seri mësimore, ne do të shqyrtojmë bazat e ndërtimit të kërkesave AJAX me jQuery. Temat e mëposhtme do të trajtohen:
- Çfarë është teknologjia AJAX? Si punon? Cilat janë avantazhet e tij?
- Si mund të bëj lloje të ndryshme kërkesash AJAX duke përdorur jQuery?
- Dërgimi i të dhënave në server duke përdorur kërkesat AJAX.
- Përpunimi dhe nxjerrja e të dhënave nga përgjigjet AJAX nga serveri.
- Si mund ta personalizoj trajtimin AJAX të jQuery dhe të ndryshoj standardet?
Shënim: Tutorialët fokusohen në pjesën JavaScript nga ana e klientit. Por zhvillimi nga ana e serverit është gjithashtu mjaft i drejtpërdrejtë. Për më shumë informacion, duhet të studioni materialet në gjuhët e programimit nga ana e serverit, siç është PHP.
Çfarë është AJAX dhe si është i dobishëm?
AJAX është një teknikë e zhvillimit të aplikacioneve në internet në të cilën kodi JavaScript që ekzekutohet në shfletuesin e një vizitori komunikon me një server në internet në mënyrë asinkrone, domethënë në sfond. Dallimet nga aplikacionet e zakonshme të uebit janë si më poshtë:
- Uebfaqe e rregullt përmban lidhje ose forma që, kur klikohen ose dorëzohen, gjenerojnë një kërkesë për një URL të re në serverin e uebit. Serveri dërgon një faqe krejtësisht të re HTML, të cilën shfletuesi e shfaq më pas, duke zëvendësuar faqen origjinale. Kjo qasje kërkon kohë dhe ka një efekt të keq te vizitori, pasi duhet të presin që faqja e re të ngarkohet.
- Kur përdorni teknologjinë AJAX, Kodi JavaScript bën një kërkesë për një URL në server. Kodi gjithashtu mund të dërgojë të dhëna së bashku me kërkesën. Kodi JavaScript më pas përpunon përgjigjen e serverit dhe vepron në përputhje me rrethanat. Për shembull, llogaritjet mund të kryhen me të dhënat e kthyera, mund të shtohet ose përditësohet një widget në faqe, mund t'i lëshohet një mesazh vizitorit për përditësimin e bazës së të dhënave në server.
Për shkak se kërkesa AJAX ekzekutohet në sfond, JavaScript (dhe vizitori) mund të vazhdojnë të ndërveprojnë me faqen ndërsa kërkesa është duke u përpunuar. Procesi fshihet nga vizitori i cili nuk ka nevojë të largohet nga faqja që po shikon në një moment të caktuar. Kjo qasje i bën faqet AJAX shumë të këndshme për të punuar.
Zemra e AJAX është objekti JavaScript XMLHttpRequest. Ai siguron një sërë metodash si open (), send (), dhe onreadystatechange () që mund të përdoren kur dërgoni kërkesa AJAX në server dhe përpunoni përgjigjet në sfond.
Zhvillimi i kodit AJAX JavaScript me ndërshfletues mund të jetë një proces i lodhshëm. Për fat të mirë, jQuery ju jep disa metoda AJAX të thjeshta për t'u përdorur që abstragojnë shumë operacione të nivelit të ulët.
Për ata më kureshtarët, fjala AJAX është një shkurtim për shkronjat e para të një shprehjeje në anglisht " A sinkron J avaScript A nd X ML "(JavaScript asinkron dhe XML.) Megjithatë, termi mund të jetë mashtrues - kërkesa nuk duhet të jetë asinkrone dhe nuk është e nevojshme të përdoret XML për të paraqitur të dhënat.
Bërja e një kërkese GET me $ .get ()
Metoda jQuery $ .get () ofron një mënyrë të lehtë dhe të përshtatshme për të bërë një kërkesë të thjeshtë AJAX. Ai e bën kërkesën duke përdorur metodën HTTP GET (përdoret për të marrë URL si faqet dhe imazhet) në vend të metodës POST (e cila përdoret tradicionalisht për të paraqitur të dhënat e formularit).
Në formën e saj më të thjeshtë, mund të telefononi një metodë si kjo:
Ku url është URL-ja e burimit nga i cili pritet një përgjigje. Ky është zakonisht një skript nga ana e serverit që kryen disa veprime dhe mund të kthejë disa të dhëna:
$ .get ("http://example.com/getForecast.php");
Edhe pse është gjithashtu e mundur të kërkoni një dokument statik:
$ .get ("http://example.com/mypage.html");
Kur kërkoni një URL, mund të dërgoni të dhëna me kërkesën. Ju mund të kaloni të dhëna në një varg pyetjesh, ashtu si një kërkesë normale GET:
$ .get ("http://example.com/getForecast.php?city=rome&date=20120318");
Do të ishte e saktë të bënim të njëjtën gjë duke kaluar një objekt të dhënash si parametër të dytë në metodën $ .get (). Objekti i të dhënave duhet të përmbajë informacion në formën e çifteve të emrit të pronës / vlerës së pronës. Për shembull:
Var data = (qyteti: "roma", data: "20120318"); $ .get ("http://example.com/getForecast.php", të dhëna);
Përndryshe, ju mund t'i kaloni të dhënat metodës $ .get () si një varg:
Var data = "qytet = roma & data = 20120318"; $ .get ("http://example.com/getForecast.php", të dhëna);
Ne marrim të dhëna nga serveri
Deri më tani, ne kemi parë shembuj të përdorimit të $ .get () vetëm për të dërguar kërkesa në server, duke injoruar çdo përgjigje që mund të gjenerojë një skrip nga ana e serverit. Por në shumicën e rasteve, kodi juaj JavaScript do të presë një përgjigje nga një skript nga ana e serverit dhe do të përpunojë të dhënat e marra.
Një kërkesë AJAX është asinkrone, që do të thotë se ekzekutohet në sfond ndërsa pjesa tjetër e JavaScript vazhdon të ekzekutohet. Atëherë, si të merrni një përgjigje nga serveri kur kërkesa të përfundojë?
Ju duhet të shkruani funksioni i kthimit i cili do të ekzekutohet automatikisht kur kërkesa AJAX të përfundojë dhe serveri të dërgojë një përgjigje. Së paku, funksioni juaj duhet të pranojë të dhënat e kthyera nga serveri si argumentin e tij të parë:
Funksioni myCallback (të dhëna të kthyera) (// Kryeni përpunimin e të dhënave të kthyera)
Pasi të krijohet funksioni i kthimit të thirrjes, mund ta kaloni atë si argumentin e tretë në metodën $ .get ():
Var data = (qyteti: "roma", data: "20120318"); $ .get ("http://example.com/getForecast.php", të dhëna, myCallback);
Përcaktimi i llojit të të dhënave të përgjigjes
Në mënyrë tipike, ana e serverit transferon të dhëna në një nga disa formate të zakonshme, duke përfshirë XML, JSON, JavaScript ose HTML. Si parazgjedhje, jQuery përpiqet të përcaktojë formatin më të përshtatshëm dhe të analizojë të dhënat në përputhje me rrethanat. Por është më mirë të përcaktohet në mënyrë eksplicite formati.
Për të specifikuar formatin, kaloni argumentin e katërt në metodën $ .get (). Ky argument mund të jetë një varg nga lista e mëposhtme:
- "xml"
- "json"
- "script"
- "html"
Për shembull, nëse e dini se skripti i serverit po kthen të dhëna në formatin JSON, atëherë thirrni metodën $ .get () si më poshtë:
$ .get ("http://example.com/getForecast.php", të dhëna, myCallback, "json");
Një shembull i përdorimit të metodës $ .get ().
Ja një shembull i krijimit të një kërkese AJAX duke përdorur metodën $ .get () dhe trajtimin e thjeshtë të përgjigjes. Që shembulli të funksionojë, duhet të krijoni një skedar teksti të thjeshtë në server me emrin getForecast.txt që përmban tekstin e mëposhtëm:
("qyteti": "Vasyuki", "data": "18 mars 2012", "parashikimi": "Ftohtë e ftohtë dhe baltë", "maxTemp": +1)
Ky skedar do të simulojë një përgjigje JSON që mund të jetë krijuar nga një skenar i parashikimit të motit në server.
Më pas krijojmë faqen showForecast.html në të njëjtën dosje si getForecast.txt: