När du använder Ajax (Asynkron JavaScript och XML) för att komma åt servern utan att ladda om webbsidan. Du har två val om hur du skickar informationen för begäran till servern: GET eller POST.
Dessa är samma två alternativ som du har när du skickar förfrågningar till servern om att ladda en ny sida, men med två skillnader. Den första är att du bara begär en liten information istället för en hel webbsida. Den andra och mest märkbara skillnaden är att eftersom Ajax-begäran inte visas i adressfältet kommer dina besökare inte att märka någon skillnad när begäran görs.
Samtal som gjorts med GET exponerar inte fälten och deras värden någonstans som att använda POST inte också exponeras när samtalet görs från Ajax.
Vad du inte bör göra
Så, hur ska vi välja vilket av dessa två alternativ som ska användas?
Ett misstag som vissa nybörjare kan göra är att använda GET för de flesta av sina samtal helt enkelt för att det är lättare för de två att koda. Den mest märkbara skillnaden mellan GET- och POST-samtal i Ajax är att GET-samtal fortfarande har samma gräns för mängden data som kan skickas som när du begär en ny sidbelastning.
Den enda skillnaden är att eftersom du bara bearbetar en liten mängd data med en Ajax-begäran (eller åtminstone det är så du borde använda det), det är mycket mindre troligt att du kommer att löpa in denna längdgräns inom Ajax som du skulle göra när du laddar en komplett web sida. En nybörjare kan reservera sig med POST-förfrågningar i de få fall där de behöver skicka mer information som GET-metoden tillåter.
Den bästa lösningen när du har massor av data att passera så är att ringa flera Ajax-samtal som skickar några informationstyper åt gången. Om du ska skicka enorma mängder data allt i ett Ajax-samtal, skulle du förmodligen vara bättre på att bara ladda om hela sidan eftersom det inte kommer att finnas någon signifikant skillnad i behandlingstiden när enorma datamängder är inblandade.
Så om mängden data som ska skickas inte är en bra anledning att välja mellan GET och POST, vad ska vi använda för att besluta?
Dessa två metoder var faktiskt inrättade för helt olika syften, och skillnaderna mellan hur de fungerar delvis beror på skillnaden i vad de är avsedda att användas för. Detta gäller inte bara att använda GET och POST från Ajax, men egentligen var dessa metoder kan användas.
Syftet med GET och POST
GET används som namnet antyder: till skaffa sig information. den är avsedd att användas när du läser information. Webbläsare cachar resultatet från en GET-begäran och om samma GET-begäran görs igen, kommer de att visa det cachade resultatet istället för att köra hela begäran igen.
Detta är inte ett fel i webbläsarens behandling; den är medvetet utformad för att fungera så att GET-samtal blir effektivare. Ett GET-samtal hämtar bara informationen; det är inte avsett att ändra någon information på servern, varför det krävs samma resultat om att begära data igen.
POST-metoden är avsedd för inlägg eller uppdatera information på servern. Denna typ av samtal förväntas ändra uppgifterna, varför resultaten som returneras från två identiska POST-samtal mycket väl kan vara helt annorlunda. De initiala värdena före det andra POST-samtalet kommer att skilja sig från värdena före det första eftersom det första samtalet har uppdaterat åtminstone några av dessa värden. Ett POST-samtal kommer därför alltid att få svaret från servern istället för att behålla en cache-kopia av det tidigare svaret.
Hur man väljer GET eller POST
Istället för att välja mellan GET och POST baserat på hur mycket data du skickar i ditt Ajax-samtal, bör du välja baserat på vad Ajax-samtalet faktiskt gör.
Om samtalet ska hämta data från servern använder du GET. Om värdet som ska hämtas förväntas variera över tiden till följd av andra processer som uppdaterar det, lägg till en aktuell tidsparameter till vad du vidarebefordrar i ditt GET-samtal så att de senare samtalen inte använder en tidigare cachelagrad kopia av resultatet som inte längre är korrekt.
Använd POST om ditt samtal ska skriva data till servern alls.
Faktum är att du inte bara ska använda detta kriterium för att välja mellan GET och POST för dina Ajax-samtal utan också för när du väljer vilket som ska användas för att bearbeta formulär på din webbsida.