AJAX防重復提交的辦法總結?
阿新 • • 發佈:2018-06-29
type 啟用 異步 一個 表數據 問題 網絡問題 itl 方式
1.造成重復提交原因
由於AJAX提交數據為異步提交,所以當我們點擊提交按鈕是通過xmlhttprequest向服務器發送異步請求,發送請求需要有處理時間,我們第一次點擊的請求尚未完成,就有接二連三的又提交了幾次,同時後來發送的請求同事也被發送到後臺處理了,這種情況如果是數據讀取則不會有太大影響,但是涉及到數據提交保存或者提交之後多表數據處理就更麻煩了,所以此種情況務必要避免,免得給大家造成麻煩。
2.重復提交解決辦法
- 如果提交對象為按鈕的話,可以對按鈕設置disabled,此辦法適應於按鈕提交,此種方法簡單粗暴,也是很多人用的辦法,代如下:
//在按鈕提交之後和AJAX提交之前將按鈕設置為禁用
$("input[type=submit]").attr(‘disabled‘,true)
$.ajax({
url:‘/post.php‘
data:{a:1,b,1}
success:function(){
//在提交成功之後重新啟用該按鈕
$("input[type=submit]").attr(‘disabled‘,false)
},
error: function(){
//即使AJAX失敗也需要將按鈕設置為可用狀態,因為有可能是網絡問題導致的失敗,所以需要將按鈕設置為可用
$("input[type=submit]").attr(‘disabled‘,false)
}
})
- 非按鈕對象提交
有時候我們在提交數據的時候沒有from,只有單個表單組件(input、textarea、radio、checkbox等),所以我們就可以將任何一個對象設置提交對象來完成提交,由於普通對象沒有disabled屬性,所以我們需要用其它方式來防止重復提交
//設置一個對象來控制是否進入AJAX過程
var post_flag = false;
function post(){
//如果正在提交則直接返回,停止執行
if(post_flag) return;
//標記當前狀態為正在提交狀態
post_flag = true;
$.ajax({//進入AJAX提交過程
url:‘/post.php‘
data:{a:1,b,1}
success:function(){
post_flag =false; //在提交成功之後將標誌標記為可提交狀態
},
error: function(){
post_flag =false; //AJAX失敗也需要將標誌標記為可提交狀態
}
})
}
AJAX防重復提交的辦法總結?