国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery的 $.ajax防止重復(fù)提交的兩種方法(推薦)

2019-11-20 08:44:55
字體:
供稿:網(wǎng)友

下面給大家?guī)韮煞N關(guān)于jquery 的ajax防止重復(fù)提交的解決方法,具體介紹如下所示:

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();');//改變提交按鈕上的文字并將按鈕設(shè)置為不可點擊}, 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();');//改變提交按鈕上的文字并將按鈕設(shè)置為可點擊 }},error: function (textStatus) {$.Alert('網(wǎng)絡(luò)繁忙,請稍后再試...', 160);$('#submit_font').text('提交訂單');$('.pay_alipay').attr('onclick','submitorder();');//改變提交按鈕上的文字并將按鈕設(shè)置為可點擊 },complete: function(msg, textStatus){ //ajax請求完成時執(zhí)行if(msg.result==1){$('#submit_font').text('提交訂單');$('.pay_alipay').attr('onclick','javascript:void();');//改變提交按鈕上的文字并將按鈕設(shè)置為可以點擊}} }); 

2、利用jquery ajaxPrefilter中斷請求

1)Prefilters是一個預(yù)過濾器,在每個請求之前被發(fā)送和$.ajax()處理它們前處理。

options 是請求的選項

originalOptions 值作為提供給Ajax方法未經(jīng)修改的選項,因此,沒有ajaxSettings設(shè)置中的默認(rèn)值

jqXHR 是請求的jqXHR對象

以上內(nèi)容的核心思想是維護一個隊列,發(fā)送請求時,將請求加入隊列,請求響應(yīng)后,從隊列中清除,這就保證了在任一時刻只能有一個同樣的請求發(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);}};});<!-- 異步加載應(yīng)用列表開始 -->$("#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('應(yīng)用加載失敗!');}}});<!-- 異步加載應(yīng)用列表結(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防止重復(fù)提交的兩種方法(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 寿光市| 常熟市| 墨竹工卡县| 崇仁县| 江都市| 石柱| 扬中市| 南雄市| 郓城县| 永城市| 东丽区| 垣曲县| 弥渡县| 黎川县| 开平市| 边坝县| 黄骅市| 吉安县| 蓬安县| 盐源县| 荆州市| 大埔县| 海阳市| 东丰县| 巴林右旗| 乌拉特前旗| 来凤县| 专栏| 嵩明县| 嘉荫县| 临颍县| 洮南市| 南溪县| 古交市| 洪雅县| 四会市| 江都市| 昌黎县| 嘉义县| 香港| 永善县|