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 相关文章推荐
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
Aug 21 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
Jan 21 Javascript
js通过地址栏给action传值(中文乱码全是问号)
May 02 Javascript
Javascript浅谈之this
Dec 17 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
jQuery的ready方法详解
Nov 27 Javascript
javascript包装对象实例分析
Mar 27 Javascript
BootStrap Table对前台页面表格的支持实例讲解
Dec 22 Javascript
Json按某个键的值进行排序
Dec 22 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
Angular 4 指令快速入门教程
Jun 07 Javascript
JS实现电话号码的字母组合算法示例
Feb 26 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
PHP脚本的10个技巧(6)
2006/10/09 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
2016/05/03 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
Python代码实现KNN算法
2017/12/20 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
.net面试题
2016/09/17 面试题
专科文秘应届生求职信
2013/11/18 职场文书
会计助理岗位职责
2014/02/17 职场文书
抽样调查项目计划书
2014/04/24 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年库房工作总结
2014/11/26 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
补充协议书
2015/01/28 职场文书
本溪关门山导游词
2015/02/09 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL
MySQL分布式恢复进阶
2022/07/23 MySQL
MySQL数据库查询之多表查询总结
2022/08/05 MySQL