十分鐘內(nèi)學(xué)會(huì) 避免用戶刷新導(dǎo)致重復(fù)POST提交
更新時(shí)間:2009年08月03日 23:47:56 作者:
在Web應(yīng)用中,采用POST提交信息是非常常見的,然而如果目標(biāo)頁(yè)面打開得太慢,用戶就可能會(huì)刷新頁(yè)面,這時(shí)候之前已經(jīng)提交過的信息就會(huì)被重復(fù)提交。
Question
在Web應(yīng)用中,采用POST提交信息是非常常見的,然而如果目標(biāo)頁(yè)面打開得太慢,用戶就可能會(huì)刷新頁(yè)面,這時(shí)候之前已經(jīng)提交過的信息就會(huì)被重復(fù)提交。即使用戶成功打開了POST提交目標(biāo)頁(yè),之后他通過鏈接導(dǎo)航到別處了,再退回到POST提交目標(biāo)頁(yè)時(shí)仍可能會(huì)重復(fù)提交頁(yè)面(例如因?yàn)闉g覽器緩存已失效)。而且,只要碰到重復(fù)POST提交的場(chǎng)景,瀏覽器就會(huì)問用戶是否確認(rèn)重做此操作,用戶并不一定能正確理解重做意味著重做什么,瀏覽器又不允許網(wǎng)站向用戶解釋清楚,所以這屬于非常不友善的設(shè)計(jì)。那么我們應(yīng)該如何避免用戶刷新帶來的重復(fù)提交呢?
Answer
有一種最簡(jiǎn)單的模式能夠解決這個(gè)問題,叫做PRG,也就是Post-Redirect-Get。在用戶提交信息后,我們不要在POST提交的目標(biāo)URL返回結(jié)果頁(yè)面,而返回一個(gè)302將瀏覽器重定向到真正的結(jié)果顯示頁(yè),然后瀏覽器通過GET去獲取那個(gè)頁(yè)面。
這樣做的話,用戶刷新結(jié)果頁(yè),或者通過歷史記錄回到該頁(yè)面,都不會(huì)導(dǎo)致瀏覽器要重新進(jìn)行POST,自然也就不會(huì)出現(xiàn)煩人的是否重做對(duì)話框了。而對(duì)于你來說,也有效避免了用戶重復(fù)提交信息的可能性。
在Web應(yīng)用中,采用POST提交信息是非常常見的,然而如果目標(biāo)頁(yè)面打開得太慢,用戶就可能會(huì)刷新頁(yè)面,這時(shí)候之前已經(jīng)提交過的信息就會(huì)被重復(fù)提交。即使用戶成功打開了POST提交目標(biāo)頁(yè),之后他通過鏈接導(dǎo)航到別處了,再退回到POST提交目標(biāo)頁(yè)時(shí)仍可能會(huì)重復(fù)提交頁(yè)面(例如因?yàn)闉g覽器緩存已失效)。而且,只要碰到重復(fù)POST提交的場(chǎng)景,瀏覽器就會(huì)問用戶是否確認(rèn)重做此操作,用戶并不一定能正確理解重做意味著重做什么,瀏覽器又不允許網(wǎng)站向用戶解釋清楚,所以這屬于非常不友善的設(shè)計(jì)。那么我們應(yīng)該如何避免用戶刷新帶來的重復(fù)提交呢?
Answer
有一種最簡(jiǎn)單的模式能夠解決這個(gè)問題,叫做PRG,也就是Post-Redirect-Get。在用戶提交信息后,我們不要在POST提交的目標(biāo)URL返回結(jié)果頁(yè)面,而返回一個(gè)302將瀏覽器重定向到真正的結(jié)果顯示頁(yè),然后瀏覽器通過GET去獲取那個(gè)頁(yè)面。
這樣做的話,用戶刷新結(jié)果頁(yè),或者通過歷史記錄回到該頁(yè)面,都不會(huì)導(dǎo)致瀏覽器要重新進(jìn)行POST,自然也就不會(huì)出現(xiàn)煩人的是否重做對(duì)話框了。而對(duì)于你來說,也有效避免了用戶重復(fù)提交信息的可能性。
您可能感興趣的文章:
- android中ListView多次刷新重復(fù)執(zhí)行g(shù)etView的解決方法
- javascript下阻止表單重復(fù)提交、防刷新、防后退
- Asp.Net防止刷新重復(fù)提交數(shù)據(jù)的辦法
- asp.net 處理F5刷新頁(yè)面重復(fù)提交頁(yè)面的一個(gè)思路
- firefox下jquery iframe刷新頁(yè)面提示會(huì)導(dǎo)致重復(fù)之前動(dòng)作
- JSP刷新頁(yè)面表單重復(fù)提交問題解決辦法分享
- 關(guān)于頁(yè)面刷新,事件重復(fù)提交的方法分享
- php環(huán)境下利用session防止頁(yè)面重復(fù)刷新的具體實(shí)現(xiàn)
- asp.net防止刷新時(shí)重復(fù)提交(可禁用工具條刷新按鈕)
- javaweb用戶注銷后點(diǎn)擊瀏覽器返回刷新頁(yè)面重復(fù)登錄問題的解決方法
相關(guān)文章
加速?PyTorch?模型訓(xùn)練的?9?個(gè)技巧(收藏)
本指南從最簡(jiǎn)單的結(jié)構(gòu)到最復(fù)雜的改動(dòng)都有,可以使你的網(wǎng)絡(luò)得到最大的好處。我會(huì)給你展示示例Pytorch代碼以及可以在Pytorch-?lightning?Trainer中使用的相關(guān)flags,這樣你可以不用自己編寫這些代碼,感興趣的朋友一起看看吧2022-03-03
手機(jī)中點(diǎn)擊網(wǎng)頁(yè)鏈接實(shí)現(xiàn)撥號(hào)或保存電話功能實(shí)現(xiàn)代碼
這篇文章主要介紹了手機(jī)中點(diǎn)擊網(wǎng)頁(yè)鏈接實(shí)現(xiàn)撥號(hào)或保存電話功能實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04
vscode 一鍵規(guī)范代碼格式的實(shí)現(xiàn)
這篇文章主要介紹了vscode 一鍵規(guī)范代碼格式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
詳解git merge 與 git rebase的區(qū)別
這篇文章主要介紹了詳解git merge 與 git rebase的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
詳解使用Postman模擬瀏覽器的HTTP請(qǐng)求并獲取返回?cái)?shù)據(jù)
這篇文章主要為大家介紹了在瀏覽器中,獲取網(wǎng)頁(yè)中的某一個(gè)請(qǐng)求信息,并將其導(dǎo)入到Postman軟件,并進(jìn)行API請(qǐng)求測(cè)試的方法,需要的可以參考下2024-03-03

