Ajax, 選擇GET還是POST?
當(dāng)我們不通過重新加載頁面,用Ajax訪問服務(wù)器的時候,有兩個選擇可以將請求信息傳送到服務(wù)器上。這兩個選擇分別是GET和POST。
在把請求信息發(fā)送到服務(wù)器上以加載新的頁面時,這兩個選擇有兩個不同之處。***個區(qū)別是你是請求了信息的一小部分而不是整個頁面。第二個區(qū)別也是最明顯的區(qū)別是由于Ajax請求不會出現(xiàn)在地址欄中,因此當(dāng)發(fā)送請求時,在訪問者的屏幕上是看不出什么異同的。使用GET生成調(diào)用不會暴露域和它們的值,使用POST也不會暴露。因此,我們要怎樣在這兩者之間作出選擇呢?
初學(xué)者可能犯的一個錯誤是對于大多數(shù)的調(diào)用都使用GET命令,僅僅因?yàn)檫@一命令相對而言更容易編寫。GET與POST調(diào)用之間最顯著的差異是當(dāng)發(fā)出加載新頁面請求時,GET調(diào)用對于同樣數(shù)量的數(shù)據(jù)有著相同的限制。唯一的區(qū)別是你處理的少量的Ajax請求數(shù)據(jù),而你并不想通過這種長度運(yùn)行的限制來完成頁面的加載。初學(xué)者可能會在少數(shù)情況下,如他們確實(shí)需要傳送更多信息時,使用POST。
當(dāng)我們有大量數(shù)據(jù)要傳送時***的辦法是一次發(fā)出多個只傳遞少量信息的Ajax調(diào)用時。如果你正用一個Ajax調(diào)用發(fā)送大量數(shù)據(jù),那么***是結(jié)束這種做法,因?yàn)檫@樣做并不能節(jié)約時間。
因此,需要傳送大量數(shù)據(jù)能成為我們在GET和POST之間猶豫不決的理由嗎?這兩個方法都是為不同的目的而設(shè)計的,兩者的不同也在于其使用目的。這一說法不僅適用于GET和POST的使用,也適用于其他的方法。
GET的目的就如同其名字一樣是用于獲取信息的。它旨在顯示出頁面上你要閱讀的信息。瀏覽器會緩沖GET請求的執(zhí)行結(jié)果,如果同樣的GET請求再次發(fā)出,瀏覽器就會顯示緩沖的結(jié)果而不是重新運(yùn)行整個請求。這***程不同于瀏覽器的處理過程,但是它是有意設(shè)計成這樣以使GET調(diào)用更有效率。GET調(diào)用會檢索要顯示在頁面中的數(shù)據(jù),數(shù)據(jù)不會在服務(wù)器上被更改,因此重新請求相同數(shù)據(jù)的時候會得到相同的結(jié)果。
POST方法應(yīng)該用于你需要更新服務(wù)器信息的地方。如某調(diào)用要更改保存在服務(wù)器上的數(shù)據(jù),而從兩個同樣的POST調(diào)用返回的結(jié)果或許會完全不同,因?yàn)榈诙€POST調(diào)用的值與***個的值不相同,這是由于***個調(diào)用已經(jīng)更新了其中一些值。POST調(diào)用通常會從服務(wù)器上獲取響應(yīng)而不是保持前一個響應(yīng)的緩沖。
因此,不要用數(shù)據(jù)的量來決定是要選擇GET還是POST,而應(yīng)該按照目的在兩者間作出選擇。如果調(diào)用是要檢索服務(wù)器上的數(shù)據(jù)則使用GET。如果要檢索的值會隨時間和更新進(jìn)程的改變而改變則要在GET調(diào)用中添加一個當(dāng)前時間參數(shù),這樣后面的調(diào)用才不會使用先前的不正確的緩沖。如果調(diào)用是向服務(wù)器上發(fā)送任意數(shù)據(jù),就可以使用POST。
事實(shí)上,我們不應(yīng)該不僅僅只將這個標(biāo)準(zhǔn)作為選擇怎樣使用GET和POST調(diào)用的標(biāo)準(zhǔn),在處理頁面處理形式的時候也可以將它作為取舍這兩個調(diào)用的標(biāo)準(zhǔn)。
【編輯推薦】