Kad koristite Ajax (Asinhroni JavaScript i XML) za pristup poslužitelju bez ponovnog učitavanja web stranice, imate dva izbora kako proslijediti podatke za zahtjev poslužitelju: GET ili POST.
To su iste dvije mogućnosti koje imate prilikom slanja zahtjeva poslužitelju za učitavanje nove stranice, ali s dvije razlike. Prvo je da tražite samo mali dio informacija, a ne cijelu web stranicu. Druga i najuočljivija razlika je ta što se zahtjev Ajax-a ne pojavljuje u adresnoj traci, posjetitelji neće primijetiti razliku kad su zatražili zahtjev.
Pozivi upućeni pomoću GET neće polja izložiti polja i njihove vrijednosti nigdje na kojima se pomoću POST-a ne izlaže kad je poziv upućen iz Ajaxa.
Ono što ne biste trebali učiniti
Dakle, kako trebamo odlučiti koju od ove dvije alternative treba koristiti?
Pogreška koju bi neki početnici mogli učiniti je korištenje GET-a za većinu njihovih poziva, jednostavno zato što ih je lakše kodirati. Najočitija razlika između GET i POST poziva u Ajaxu je ta što GET pozivi i dalje imaju isto ograničenje za količinu podataka koja se može proslijediti kao kada se traži učitavanje nove stranice.
Razlika je samo u tome što obrađujete samo malu količinu podataka putem Ajax zahtjeva (ili barem tako vi trebate ga koristiti), manje je vjerovatno da ćete naići na ovo ograničenje duljine unutar Ajaxa kao što biste to učinili s učitavanjem kompletnog weba stranica. Početnik može rezervirati koristeći POST zahtjeve za nekoliko slučajeva u kojima im treba proslijediti više informacija koje dopušta GET metoda.
Najbolje rješenje kada imate puno podataka za prosljeđivanje je upućivanje više Ajax-ovih poziva koji prenose nekoliko informacija istovremeno. Ako ćete proslijediti ogromne količine podataka u jednom pozivu Ajax, vjerojatno bi bilo bolje da se jednostavno ponovno učita. cijelu stranicu jer neće biti značajne razlike u vremenu obrade kada su ogromne količine podataka uključeni.
Dakle, ako količina podataka koja se prosljeđuje nije dobar razlog za odabir između GET i POST, pa što trebamo koristiti za odlučivanje?
Ove su dvije metode ustvari postavljene za potpuno različite svrhe, a razlike između načina djelovanja djelomično su rezultat razlike u onome za što se namjeravaju koristiti. To se ne odnosi samo na korištenje GET-a i POST-a iz Ajaxa, već i bilo gdje ove metode mogu biti korištene.
Svrha GET-a i POST-a
GET koristi se kao što ime znači: na dobiti informacija. služi za upotrebu dok čitate informacije. Preglednici predmemoriraju rezultat iz GET zahtjeva, a ako je isti GET zahtjev ponovo postavljen, prikazat će keširani rezultat, a ne ponovo pokrenuti cijeli zahtjev.
To nije nedostatak u obradi preglednika; Namjerno je dizajniran tako da djeluje na način da GET pozivi budu učinkovitiji. GET poziv je samo dohvaćanje podataka; nije namijenjeno mijenjanju bilo kakvih podataka na poslužitelju, zbog čega zahtjev za ponovno dobivanje podataka treba vratiti iste rezultate.
Metoda POST je za postavljanje ili ažuriranje podataka na poslužitelju. Očekuje se da će ova vrsta poziva promijeniti podatke, zbog čega se rezultati vraćeni s dva identična POST poziva mogu sasvim razlikovati jedan od drugog. Početne vrijednosti prije drugog POST poziva razlikuju se od vrijednosti prije prvog jer će početni poziv ažurirati barem neke od tih vrijednosti. Stoga će POST poziv uvijek dobiti odgovor od poslužitelja, a ne zadržavati keširanu kopiju prethodnog odgovora.
Kako odabrati GET ili POST
Umjesto da odaberete između GET i POST na temelju količine podataka koje prolazite u vašem pozivu Ajax, trebali biste odabrati na temelju onoga što Ajax poziv zapravo radi.
Ako je poziv dohvaćanje podataka s poslužitelja, tada koristite GET. Ako se očekuje da će se vrijednost dohvaćenog vremena s vremenom mijenjati kao rezultat ostalih procesa ažuriranja, dodajte trenutni parametar vremena u što prosljeđujete u svom GET pozivu kako kasniji pozivi ne bi koristili stariju kopiranu kopiju rezultata koji više nije ispravan.
Upotrijebite POST ako će vaš poziv uopće pisati bilo kakve podatke na poslužitelj.
Zapravo, ovaj kriterij ne biste trebali koristiti samo za odabir između GET i POST za vaše pozive Ajax, već i za odabir koji će se koristiti za obradu obrazaca na vašoj web stranici.