jQuery的 $.ajax防止重复提交的两种方法(推荐)


Posted in Javascript onOctober 14, 2016

下面给大家带来两种关于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();');//改变提交按钮上的文字并将按钮设置为不可点击
}, 
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('网络繁忙,请稍后再试...', 160);
$('#submit_font').text('提交订单');
$('.pay_alipay').attr('onclick','submitorder();');//改变提交按钮上的文字并将按钮设置为可点击 
},
complete: 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)按钮每次点击都会向后端发送请求,下面的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 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){
//后端数据回写到页面中
},
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防止重复提交的两种方法(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
javascript的动态加载、缓存、更新以及复用(一)
Jun 09 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
详解Angularjs filter过滤器
Feb 06 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
微信小程序实现页面跳转传值的方法
Oct 12 Javascript
在微信小程序中使用mqtt服务的方法
Dec 13 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 Javascript
jQuery如何防止Ajax重复提交
Oct 14 #Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 #Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 #Javascript
js插件Jcrop自定义截取图片功能
Oct 14 #Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
Oct 14 #Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 #Javascript
JS动态计算移动端rem的解决方案
Oct 14 #Javascript
You might like
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python最长回文串算法
2018/06/04 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
python 追踪except信息方式
2020/04/25 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
店长职务说明书
2014/02/04 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
党员承诺书内容
2014/03/26 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
给领导敬酒词
2015/08/12 职场文书
初中数学课堂教学反思
2016/02/17 职场文书