1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php ajax jquery 表单重复提交 jQuery如何防止Ajax重复提交

php ajax jquery 表单重复提交 jQuery如何防止Ajax重复提交

时间:2024-01-17 19:51:24

相关推荐

php ajax jquery 表单重复提交 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 = plete;

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。