jQuery的 $.ajax防止重复提交的两种方法(推荐)
狼蚁网站SEO优化给大家带来两种关于jquery 的ajax防止重复提交的解决方法,具体介绍如下所示
1、第一种,对于onclick事件触发的的ajax
可以采用如下方法
即在beforeSend中使点击按钮不可用,ajax结果返回后置为可用
$.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() { //触发ajax请求开始时执行 $('#submit_font').text('提交订单中...'); $('.pay_alipay').attr('onclick','javascript:void();');//改变提交按钮上的文字并将按钮设置为不可点击 }, suess: 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('网络繁忙,请稍后再试...', 160); $('#submit_font').text('提交订单'); $('.pay_alipay').attr('onclick','submitorder();');//改变提交按钮上的文字并将按钮设置为可点击 }, plete: function(msg, textStatus) { //ajax请求完成时执行 if(msg.result==1) { $('#submit_font').text('提交订单'); $('.pay_alipay').attr('onclick','javascript:void();');//改变提交按钮上的文字并将按钮设置为可以点击 } } });
2、利用jquery ajaxPrefilter中断请求
1)Prefilters是一个预过滤器,在每个请求之前被发送和$.ajax()处理它们前处理。
options 是请求的选项
originalOptions 值作为提供给Ajax方法未经修改的选项,,没有ajaxSettings设置中的默认值
jqXHR 是请求的jqXHR对象
以上内容的核心思想是维护一个队列,发送请求时,将请求加入队列,请求响应后,从队列中清除,这就保证了在任一时刻只能有一个同样的请求发送.
局限性仅仅是前台防止jQuery的ajax请求。对于非jquery的ajax请求,不起作用。因为使用的是jquery的ajaxPreFilter函数,仅仅对jquery的ajax请求有作用。
2)按钮每次点击都会向后端发送请求,狼蚁网站SEO优化的demo实现了多次点击按钮之后,只保证一次点击的请求能够成功。
<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(); //放弃后触发的提交 pendingRequests[key].abort(); // 放弃先触发的提交 } var plete = options.plete; options.plete = function(jqXHR, textStatus) { pendingRequests[key] = null; if (jQuery.isFunction(plete)) { plete.apply(this, arguments); } }; }); <!-- 异步加载应用列表开始 --> $("#button1").live("click", function() { $.ajax('config/ajax/appinfoListFetcher.json', { type:'POST', data: {param1:1, param2:2, }, suess: function(res){ //后端数据回写到页面中 }, error:function(jqXHR, textStatus, errorThrown){ if(errorThrown != 'abort'){ alert('应用加载失败!'); } } }); <!-- 异步加载应用列表结束 --> }); </script>
调用abort后jquery会执行error的方法,抛出abort的异常信息。可以使用以下方式区分出该类型的异常。
3)注意事项对于嵌套的点击事件的代码,是不起作用的。
$('.btn-cancel-all').live('click',function() { $('.confirm-dialog .confirm').live('click',function() { $.ajax({ //这里面的ajax事件是不能起作用的 }) } }
以上所述是长沙网络推广给大家介绍的jQuery的 $.ajax防止重复提交的两种方法(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,长沙网络推广会及时回复大家的。在此也非常感谢大家对狼蚁SEO网站的支持!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程