最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jQuery如何防止Ajax重復(fù)提交

 更新時(shí)間:2016年10月14日 16:56:03   投稿:mrr  
重復(fù)提交給網(wǎng)站服務(wù)端帶來(lái)很大的壓力,下面小編給大家分享一段代碼關(guān)于jQuery如何防止Ajax重復(fù)提交,感興趣的朋友一起看看吧

首先說(shuō)說(shuō)防止重復(fù)點(diǎn)擊提交是什么意思。

  我們?cè)谠L問(wèn)有的網(wǎng)站,輸入表單完成以后,單擊提交按鈕進(jìn)行提交以后,提交按鈕就會(huì)變?yōu)榛疑?,用戶不能再單擊第二次,直到重新加載頁(yè)面或者跳轉(zhuǎn)。這樣,可以一定程度上防止用戶重復(fù)提交導(dǎo)致應(yīng)用程序上邏輯錯(cuò)誤。

  不妨引深來(lái)看,它不一定發(fā)生在表單的提交事件上,同樣可以發(fā)生在ajax的異步請(qǐng)求上。有效地在web客戶端采用一定機(jī)制去防止重復(fù)點(diǎn)擊提交,將大大減輕服務(wù)器端壓力。

下面看下代碼關(guān)于jquery ajax防止重復(fù)提交。

**
* jquery ajax請(qǐng)求過(guò)濾,防止ajax請(qǐng)求重復(fù)發(fā)送,對(duì)ajax發(fā)送錯(cuò)誤時(shí)進(jìn)行統(tǒng)一處理
*/
$(function(){
var pendingRequests = {};
// 所有ajax請(qǐng)求的通用前置filter
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = generatePendingRequestKey(options);
//請(qǐng)求是否已經(jīng)存在
if(!pendingRequests[key]){
storePendingRequest(key,jqXHR);
}else{
//如果ajax請(qǐng)求已經(jīng)存在,下一次相同的請(qǐng)求則取消,防止重復(fù)請(qǐng)求
jqXHR.abort();
}
//ajax請(qǐng)求完成時(shí),從臨時(shí)對(duì)象中清除請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)
var complete = options.complete;
options.complete = function(jqXHR, textStatus) {
//延時(shí)1000毫秒刪除請(qǐng)求信息,表示同Key值請(qǐng)求不能在此時(shí)間段內(nèi)重復(fù)提交
setTimeout(function(){
delete pendingRequests[jqXHR.pendingRequestKey];
},1000);
if ($.isFunction(complete)) {
complete.apply(this, arguments);
}
};
//統(tǒng)一的錯(cuò)誤處理
var error = options.error;
options.error = function(jqXHR, textStatus) {
errorHandler(jqXHR, textStatus);
if ($.isFunction(error)) {
error.apply(this, arguments);
}
};
});
/**
* 當(dāng)ajax請(qǐng)求發(fā)生錯(cuò)誤時(shí),統(tǒng)一進(jìn)行攔截處理的方法
*/
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:"請(qǐng)求訪問(wèn)的地址或內(nèi)容不存在!"
});
}
function accessDenied(jqXHR){
Component.warningMessageBox({
content:"你無(wú)權(quán)進(jìn)行此操作或頁(yè)面訪問(wèn)!"
});
}
function internalError(jqXHR){
Component.warningMessageBox({
content:"服務(wù)器存在錯(cuò)誤,未能正確處理你的請(qǐng)求!"
});
}
function timeoutError(jqXHR){
window.location.href=contextPath + "/j_spring_security_logout";
}
function otherError(jqXHR, textStatus){
Component.warningMessageBox({
content:"未知錯(cuò)誤,錯(cuò)誤代碼:" + textStatus
});
}
/**
* 將ajax請(qǐng)求存儲(chǔ)到臨時(shí)對(duì)象中,用于根據(jù)key判斷請(qǐng)求是否已經(jīng)存在
*/
function storePendingRequest(key, jqXHR){
pendingRequests[key] = jqXHR;
jqXHR.pendingRequestKey = key;
}
/**
* 根據(jù)ajax請(qǐng)求參數(shù)構(gòu)建一個(gè)臨時(shí)存儲(chǔ)key,此處簡(jiǎn)單的使用url作為key,
* 不考慮為解決請(qǐng)求類(lèi)型為get時(shí)相同路徑引起的緩存問(wèn)題,采用隨機(jī)碼構(gòu)建URL的情況
*/
function generatePendingRequestKey(options){
return options.url;
}
});

以上所述是小編給大家介紹的jquery防止Ajax重復(fù)提交的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

台江县| 崇义县| 沈阳市| 昌邑市| 海宁市| 海口市| 汶川县| 深圳市| 富宁县| 岳阳县| 宜昌市| 双流县| 莱西市| 襄汾县| 东乡族自治县| 巴东县| 德保县| 菏泽市| 库伦旗| 子长县| 虞城县| 军事| 通化县| 华池县| 仙游县| 唐海县| 滦南县| 襄樊市| 伊吾县| 炉霍县| 依兰县| 治县。| 谢通门县| 黄陵县| 兴和县| 兴山县| 油尖旺区| 南安市| 定边县| 涟水县| 永登县|