防止表單重復提交的方法總體來說有兩種,一種是在js中阻止重復提交;另一種是在后台利用token令牌實現,大致思路是生成一個隨機碼放到session和form表單的隱藏輸入框中,提交表單時兩者對比,表單處理完畢清空或者修改session中的token。
在js中處理簡單易懂,同時能解決我現在所做的項目中的問題,目前暫用js處理,后期如有需要再研究token機制。代碼如下:
1、表單提交后禁用提交按鈕(在本項目中表單提交完成后,如果處理成功都把form表單關掉了)
1 /** 2 * form表單格式驗證通過之后、表單提交前將提交按鈕禁用(注意順序) 3 * @param submitBtnId 提交按鈕ID 4 * @param btnType 按鈕類型 'button'或者'linkbutton' 5 * @returns {Boolean} 6 */ 7 function disableSubmitBtn(submitBtnId, btnType){ 8 if(btnType == 'button'){ 9 $("#"+submitBtnId).attr("disabled","disabled"); 10 }else if(btnType == 'linkbutton'){ 11 $("#"+submitBtnId).linkbutton('disable'); 12 } 13 return true; 14 }
由於在項目中有用到普通button和easyUI的linkbutton兩種按鈕,而禁用這兩種按鈕的方法不同,所以需要多傳一個參數btnType(按鈕類型)
2、如果提交表單失敗則啟用按鈕,以便用戶修改內容后再次提交
1 /** 2 * form表單提交失敗后將提交按鈕開啟,以便用戶修改數據后再次提交 3 * @param submitBtnId 提交按鈕ID 4 * @param btnType 按鈕類型 'button'或者'linkbutton' 5 * @returns {Boolean} 6 */ 7 function enableSubmitBtn(submitBtnId, btnType){ 8 if(btnType == 'button'){ 9 $("#"+submitBtnId).removeAttr("disabled"); 10 }else if(btnType == 'linkbutton'){ 11 $("#"+submitBtnId).linkbutton('enable'); 12 } 13 return true; 14 }
3、在每次表單提交時調用這兩個方法,具體放的位置根據實際業務邏輯而定