jq防止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防止重复提交的两种方法(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

原文链接:http://blog.csdn.net/everything1209/article/details/52626151

时间: 2024-12-06 20:14:45

jq防止ajax多次提交的方法的相关文章

MVC Ajax.BeginForm重复提交解决方法

mvc使用MVC Ajax.BeginForm提交的时候有重复提交结果的时候检查相关js文件引用情况, 其中mvc4注意 1 2 3 4 @Scripts.Render("~/bundles/modernizr") bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(                        "~/Scripts/jquery.unobtrusive*",

jQuery的$ .ajax防止重复提交的方法

没啥说的直接贴代码,很简单: 第一种方式:的onclick点击事件类型 <SCRIPT> function member_del(obj,id){ var lock = false; //默认未锁定 layer.confirm('确认要删除吗?',function(index){ if(!lock){//防止重复提交 lock = true; //锁定 $ .ajax({url:"/ CustomerEnquiry / Delete", data:{Id:id},type:

jQuery的ajax的form提交方法应用

1.如果不用ajax的form提交,就必须把表单的每一条数据进行获取,并提交给action进行处理.这样做比较麻烦,现在用了jQuery的easyui,使用封装好的ajax的form提交.脚本代码如下: //提交表单 function sysusersave(){ if($.formValidator.pageIsValid()){//校验表单输入信息是否合法 //使用jquery的ajax from提交,指定from的id和回调方法,提交的url使用提from中的action,参数为空,传递J

Jquery ajax中表单提交被拦截的问题处理方法

在实际开发项目中,由于要做支付宝的批量退款处理,需要用到ajax中去提交表单数据,项目截图如下: 由于在第二张截图“确认退款”那里需要异步ajax提交数据到服务器处理信息,处理成功后将返回的数据装载到对应界面的表单隐藏域中,然后再使用$('#formId').submit()提交表单,此时遇到谷歌.IE等浏览器拦截表单提交后的URL新窗口,思考了很久,终于找到了解决办法: 以下内容转载自http://hezlh.blog.163.com/blog/static/17810911520132271

通过Ajax进行Post提交Json数据的方法

下面pk10平台出租就为大家分享一篇qq:185 198 884通过Ajax进行Post提交Json数据的方法,具有很好的参考价值,希望对大家有所帮助.一起跟随ws平台出租过来看看吧js代码:1 $.ajax({2 type : "POST", 3 url: js_path + "/maintainAdd/add", 4 data : JSON.stringify(madd_data.editMaintain), 5 contentType : "appl

jq的ajax方法

相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and XML),异步的xml和js对象,主要用于在不刷新全局页面的基础上,更新局部页面,多用于表单提交,搜索更新 在jq中的ajax对象的格式为: $.ajax({ // some code... }) js的ajax对象在此不多赘述 二:各类属性 一个完整的ajax对象起码应该有四个属性:type, url,data,success 1.type 这个是a

jQuery实现form表单基于ajax无刷新提交方法详解

本文实例讲述了jQuery实现form表单基于ajax无刷新提交方法.分享给大家供大家参考,具体如下: 首先,新建Login.html页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.o

jQuery使用serialize(),serializeArray()方法取得表单数据+字符串和对象类型两种表单提交的方法

原始form表单值获取方式(手动): $.ajax({ type: "POST", url: "ajax.php", data: "Name=摘取天上星&position=IT技术", success: function(msg){alert(msg);}, error: function(error){alert(error);} }); JQ serialize()方法取值: $.ajax({ type: "POST&quo

ajax 调用asp.net后台方法

ajax 调用asp.net后台方法  这种做法有好几种,如调用xx.asxh 页面,或者直接调用xx.aspx也面,在page_Load中进行一些判断然后调用后面的其他方法, 或者你可以直接调用webservice: 今天我简单总结一中方法,前提是:net Framework 4.0以上的版本才支持滴呀(包括4.0),也就是说:2.0 和 3.0 都不支持滴呀 前端写法: <%@ Page Language="C#" AutoEventWireup="true&quo