jQuery的 $.ajax防止重復提交的兩種方法(推薦)
下面給大家?guī)韮煞N關于jquery 的ajax防止重復提交的解決方法,具體介紹如下所示:
1、第一種,對于onclick事件觸發(fā)的的ajax
可以采用如下方法:
即在beforeSend中使點擊按鈕不可用,ajax結(jié)果返回后置為可用
$.ajax( { type: 'POST', url: APP+'?m=Shopping&a=ajaxSubmitorder&sid='+sid+'&src='+src, cache:false, dataType: 'json', data: {'src':src,"uid": uid,'shipping_id':shipping_id,'order_amount':order_amount,'amount':amount,'postscript':postscript,'addr_id':addr_id}, async: false, beforeSend:function() { //觸發(fā)ajax請求開始時執(zhí)行 $('#submit_font').text('提交訂單中...'); $('.pay_alipay').attr('onclick','javascript:void();');//改變提交按鈕上的文字并將按鈕設置為不可點擊 }, success: function (msg, textStatus) { if(msg.result==1) { $.Alert('成功提交訂單', 160); window.location.href=APP+'?m=Pay&a=index&sid='+ sid + '&fuid='+ fuid + '&parent_order_sn='+msg.parent_order_sn; } else { $.Alert(msg.msg, 160); $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','submitorder();');//改變提交按鈕上的文字并將按鈕設置為可點擊 } }, error: function (textStatus) { $.Alert('網(wǎng)絡繁忙,請稍后再試...', 160); $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','submitorder();');//改變提交按鈕上的文字并將按鈕設置為可點擊 }, complete: function(msg, textStatus) { //ajax請求完成時執(zhí)行 if(msg.result==1) { $('#submit_font').text('提交訂單'); $('.pay_alipay').attr('onclick','javascript:void();');//改變提交按鈕上的文字并將按鈕設置為可以點擊 } } });
2、利用jquery ajaxPrefilter中斷請求
1)Prefilters是一個預過濾器,在每個請求之前被發(fā)送和$.ajax()處理它們前處理。
options 是請求的選項
originalOptions 值作為提供給Ajax方法未經(jīng)修改的選項,因此,沒有ajaxSettings設置中的默認值
jqXHR 是請求的jqXHR對象
以上內(nèi)容的核心思想是維護一個隊列,發(fā)送請求時,將請求加入隊列,請求響應后,從隊列中清除,這就保證了在任一時刻只能有一個同樣的請求發(fā)送.
局限性:僅僅是前臺防止jQuery的ajax請求。對于非jquery的ajax請求,不起作用。因為使用的是jquery的ajaxPreFilter函數(shù),僅僅對jquery的ajax請求有作用。
2)按鈕每次點擊都會向后端發(fā)送請求,下面的demo實現(xiàn)了多次點擊按鈕之后,只保證最后一次點擊的請求能夠成功。
<button id="button1">button1</button> <button id="button2">button2</button> <button id="button3">button3</button> <script type="text/javascript" src="jquery.min.js"></script> <script> var pendingRequests = {}; jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) { var key = options.url; console.log(key); if (!pendingRequests[key]) { pendingRequests[key] = jqXHR; }else{ //jqXHR.abort(); //放棄后觸發(fā)的提交 pendingRequests[key].abort(); // 放棄先觸發(fā)的提交 } var complete = options.complete; options.complete = function(jqXHR, textStatus) { pendingRequests[key] = null; if (jQuery.isFunction(complete)) { complete.apply(this, arguments); } }; }); <!-- 異步加載應用列表開始 --> $("#button1").live("click", function() { $.ajax('config/ajax/appinfoListFetcher.json', { type:'POST', data: {param1:1, param2:2, }, success: function(res){ //后端數(shù)據(jù)回寫到頁面中 }, error:function(jqXHR, textStatus, errorThrown){ if(errorThrown != 'abort'){ alert('應用加載失?。?); } } }); <!-- 異步加載應用列表結(jié)束 --> }); </script>
調(diào)用abort后jquery會執(zhí)行error的方法,拋出abort的異常信息??梢允褂靡韵路绞絽^(qū)分出該類型的異常。
3)注意事項:對于嵌套的點擊事件的代碼,是不起作用的。
$('.btn-cancel-all').live('click',function() { $('.confirm-dialog .confirm').live('click',function() { $.ajax({ //這里面的ajax事件是不能起作用的 }) } }
以上所述是小編給大家介紹的jQuery的 $.ajax防止重復提交的兩種方法(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
【經(jīng)典源碼收藏】基于jQuery的項目常見函數(shù)封裝集合
這篇文章主要介紹了基于jQuery的項目常見函數(shù)封裝集合,總結(jié)分析 jQuery常見功能的函數(shù)封裝,便于在項目開發(fā)中直接使用,需要的朋友可以參考下2016-06-06IE中jquery.form中ajax提交沒反應解決方法分享
用jquery form插件,進行ajax提交,本來可以用,好好地,突然發(fā)現(xiàn),firefox,opera等可以提交,ie的success函數(shù)運行了2012-09-09jQuery實現(xiàn)html table行Tr的復制、刪除、計算功能
這篇文章主要介紹了jQuery實現(xiàn)html table行Tr的復制、刪除、計算功能,涉及jQuery針對table表格的常見復制、添加、刪除與計算行數(shù)等簡單操作技巧,需要的朋友可以參考下2017-07-07Jquery easyui 實現(xiàn)動態(tài)樹
本文給大家介紹jquery easyui實現(xiàn)動態(tài)樹,本文通過代碼實例相結(jié)合的方式給大家展示jquery easyui實現(xiàn)動態(tài)樹的過程,感興趣的朋友一起學習吧2015-11-11