ajax提交防重,jQuery如何防止Ajax重复提交

首先说说防止重复点击提交是什么意思。

我们在访问有的网站,输入表单完成以后,单击提交按钮进行提交以后,提交按钮就会变为灰色,用户不能再单击第二次,直到重新加载页面或者跳转。这样,可以一定程度上防止用户重复提交导致应用程序上逻辑错误。

不妨引深来看,它不一定发生在表单的提交事件上,同样可以发生在ajax的异步请求上。有效地在web客户端采用一定机制去防止重复点击提交,将大大减轻服务器端压力。

下面看下代码关于jquery ajax防止重复提交。

**

* jquery ajax请求过滤,防止ajax请求重复发送,对ajax发送错误时进行统一处理

*/

$(function(){

var pendingRequests = {};

// 所有ajax请求的通用前置filter

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {

var key = generatePendingRequestKey(options);

//请求是否已经存在

if(!pendingRequests[key]){

storePendingRequest(key,jqXHR);

}else{

//如果ajax请求已经存在,下一次相同的请求则取消,防止重复请求

jqXHR.abort();

}

//ajax请求完成时,从临时对象中清除请求对应的数据

var complete = options.complete;

options.complete = function(jqXHR, textStatus) {

//延时1000毫秒删除请求信息,表示同Key值请求不能在此时间段内重复提交

setTimeout(function(){

delete pendingRequests[jqXHR.pendingRequestKey];

},1000);

if ($.isFunction(complete)) {

complete.apply(this, arguments);

}

};

//统一的错误处理

var error = options.error;

options.error = function(jqXHR, textStatus) {

errorHandler(jqXHR, textStatus);

if ($.isFunction(error)) {

error.apply(this, arguments);

}

};

});

/**

* 当ajax请求发生错误时,统一进行拦截处理的方法

*/

function errorHandler(jqXHR, textStatus){

switch (jqXHR.status){

case(500):

internalError(jqXHR);

break;

case(403):

accessDenied(jqXHR);

break;

case(408):

timeoutError(jqXHR);

break;

case(404):

pageNotFound(jqXHR);

break;

default:

//otherError(jqXHR, textStatus);

}

}

function pageNotFound(jqXHR){

Component.warningMessageBox({

content:"请求访问的地址或内容不存在!"

});

}

function accessDenied(jqXHR){

Component.warningMessageBox({

content:"你无权进行此操作或页面访问!"

});

}

function internalError(jqXHR){

Component.warningMessageBox({

content:"服务器存在错误,未能正确处理你的请求!"

});

}

function timeoutError(jqXHR){

window.location.href=contextPath + "/j_spring_security_logout";

}

function otherError(jqXHR, textStatus){

Component.warningMessageBox({

content:"未知错误,错误代码:" + textStatus

});

}

/**

* 将ajax请求存储到临时对象中,用于根据key判断请求是否已经存在

*/

function storePendingRequest(key, jqXHR){

pendingRequests[key] = jqXHR;

jqXHR.pendingRequestKey = key;

}

/**

* 根据ajax请求参数构建一个临时存储key,此处简单的使用url作为key,

* 不考虑为解决请求类型为get时相同路径引起的缓存问题,采用随机码构建URL的情况

*/

function generatePendingRequestKey(options){

return options.url;

}

});

以上所述是小编给大家介绍的jquery防止Ajax重复提交的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程圈网站的支持!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值