国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 08:44:55
字體:
供稿:網(wǎng)友

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

  我們在訪問有的網(wǎng)站,輸入表單完成以后,單擊提交按鈕進行提交以后,提交按鈕就會變?yōu)榛疑脩舨荒茉賳螕舻诙危钡街匦录虞d頁面或者跳轉(zhuǎn)。這樣,可以一定程度上防止用戶重復(fù)提交導(dǎo)致應(yīng)用程序上邏輯錯誤。

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 雅江县| 兴国县| 高州市| 大名县| 新乡市| 晴隆县| 长宁县| 上饶市| 罗田县| 基隆市| 武城县| 赤水市| 专栏| 五原县| 资阳市| 陈巴尔虎旗| 体育| 万盛区| 安化县| 固镇县| 镶黄旗| 黄石市| 响水县| 南皮县| 清镇市| 沙雅县| 晋江市| 青川县| 沙田区| 长兴县| 阿克陶县| 德阳市| 娱乐| 泽库县| 策勒县| 即墨市| 三门峡市| 志丹县| 云霄县| 章丘市| 涪陵区|