Kai naudojate „Ajax“ (Asinchroninis „JavaScript“ ir XML), norėdami pasiekti serverį neperkraudami tinklalapio, turite du pasirinkimus, kaip perduoti užklausos informaciją serveriui: GET arba POST.
Tai yra tos pačios dvi parinktys, kurias naudojate perduodami užklausas serveriui įkelti naują puslapį, tačiau su dviem skirtumais. Pirma, jūs reikalaujate tik nedidelės informacijos, o ne viso tinklalapio. Antrasis ir pastebimiausias skirtumas yra tas, kad kadangi „Ajax“ užklausa nerodoma adreso juostoje, lankytojai nepastebės skirtumo pateikdami užklausą.
Skambučiai, atlikti naudojant GET, niekur neišleis laukų ir jų verčių, kurių naudodamiesi POST taip pat neatskleisite, kai skambinsite iš „Ajax“.
Ko nereikėtų daryti
Taigi, kaip turėtume pasirinkti, kurią iš šių dviejų alternatyvų naudoti?
Klaida, kurią gali padaryti kai kurie pradedantieji, yra naudoti GET didžiąją dalį skambučių vien dėl to, kad juos abu lengviau koduoti. Ryškiausias skirtumas tarp „GET“ ir „POST“ skambučių „Ajax“ yra tas, kad GET skambučiams vis dar taikomas tas pats duomenų, kuriuos galima perduoti, kiekis, kaip ir reikalaujant įkelti naują puslapį.
Skirtumas tik tas, kad apdorojate tik nedidelį duomenų kiekį su „Ajax“ užklausa (ar bent jau taip elgiatės jūs.) turėtumėte jį naudoti), daug mažiau tikėtina, kad iš „Ajax“ pateksite į šį ilgio apribojimą, kaip tai darytumėte įkėlę visą internetą puslapis. Pradedantysis gali rezervuoti naudodamasis POST užklausomis tik tais atvejais, kai jiems reikia perduoti daugiau informacijos, kurią leidžia GET metodas.
Geriausias sprendimas, kai turite daug perduodamų duomenų, tai skambinti keliais „Ajax“ skambučiais, perduodant keletą informacijos vienu metu. Jei per vieną „Ajax“ skambutį perduosite didžiulius duomenų kiekius, jums tikriausiai būtų geriau tiesiog perkrauti visą puslapį, nes nebus didelių skirtumų apdorojimo metu, kai yra didžiulis duomenų kiekis dalyvauja.
Taigi, jei perduodamų duomenų kiekis nėra tinkama priežastis rinktis tarp GET ir POST, tada kuo turėtume remtis?
Šie du metodai iš tikrųjų buvo sukurti visiškai skirtingais tikslais, o jų veikimo skirtumai iš dalies yra dėl to, kam jie skirti. Tai ne tik taikoma naudojant „Ajax“ GET ir POST, bet ir bet kur, kur šie metodai gali būti naudojami.
GET ir POST paskirtis
GET naudojamas, kaip rodo pavadinimas: į gauti informacija. jis skirtas naudoti skaitant informaciją. Naršyklės kaups talpykloje GET užklausos rezultatą ir, jei vėl bus pateikta ta pati GET užklausa, rodys talpykloje išsaugotą rezultatą, o ne iš naujo paleis visą užklausą.
Tai nėra naršyklės apdorojimo trūkumas; jis sąmoningai sukurtas veikti taip, kad GET skambučiai būtų efektyvesni. GET skambutis yra tik informacijos gavimas; tai nėra skirta pakeisti bet kokią informaciją serveryje, todėl vėl reikalaujant duomenų turėtų būti pateikti tie patys rezultatai.
POST metodas yra skirtas komandiravimas arba atnaujinti informaciją serveryje. Tikimasi, kad tokio tipo skambučiai pakeis duomenis, todėl dviejų vienodų POST skambučių rezultatai gali labai skirtis vienas nuo kito. Pradinės vertės prieš antrąjį POST skambutį skirsis nuo verčių prieš pirmąjį, nes pradiniame skambutyje bus atnaujintos bent kelios iš šių verčių. Todėl į POST skambutį atsakymas visada bus gaunamas iš serverio, o ne išlaikytas išsaugotoje ankstesnio atsakymo kopijoje.
Kaip pasirinkti GET arba POST
Užuot pasirinkę tarp GET ir POST pagal duomenų, kuriuos perduodate „Ajax“ skambučiui, kiekį, turėtumėte pasirinkti pagal tai, ką „Ajax“ skambutis iš tikrųjų daro.
Jei skambinama norint surinkti duomenis iš serverio, naudokite GET. Jei tikimasi, kad laukiama vertė laikui bėgant skirsis dėl kitų ją atnaujinančių procesų, pridėkite dabartinio laiko parametrą prie ką jūs perduodate savo GET skambučiui, kad vėlesni skambučiai nenaudotų ankstesnės talpykloje išsaugotos rezultato, kurio nebėra, kopijos teisinga.
Naudokite POST, jei jūsų skambučio metu ketinama rašyti kokius nors duomenis į serverį.
Tiesą sakant, jūs turėtumėte ne tik naudoti šį kriterijų rinkdamiesi tarp „GET“ ir „POST“ savo „Ajax“ skambučiams, bet ir pasirinkdami, kurie turėtų būti naudojami jūsų tinklalapio formoms apdoroti.