JS Ajax請(qǐng)求如何防止重復(fù)提交
好長(zhǎng)時(shí)間沒(méi)寫(xiě)js代碼了剛好遇到這樣的問(wèn)題。我們系統(tǒng)多數(shù)表單沒(méi)有做防止重復(fù)提交的。
由于不想在后端這邊處理,因?yàn)榧偃缬珊蠖颂幚淼脑?huà),就需要在頁(yè)面加載的時(shí)候給出一次性的token值,加大了開(kāi)發(fā)的工作量不說(shuō),還容易忘記做這個(gè),同時(shí),ajax也不好處理,需要提交失敗的話(huà)同時(shí)返回新的token值。
所以我想在,js這邊動(dòng)手。其實(shí)以前和前端提過(guò),久久不見(jiàn)動(dòng)靜,就只好弄塊磚丟出去了。思路是,覆蓋掉$.ajax,在這里面處理掉防止重復(fù)提交的問(wèn)題,而前端的業(yè)務(wù)開(kāi)發(fā)不受影響,不改代碼,無(wú)感知。
我想架構(gòu)的目的之一,就在于簡(jiǎn)化業(yè)務(wù)開(kāi)發(fā),屏蔽掉業(yè)務(wù)無(wú)關(guān)的細(xì)節(jié),讓一線(xiàn)開(kāi)發(fā)安心寫(xiě)業(yè)務(wù)吧。
代碼如下:
/** * Created by xiayongsheng on 2016/6/12. */ ;(function($){ var ajax = $.ajax; // 用于存儲(chǔ)ajax的請(qǐng)求 var ajaxState = {}; var kinhomAjax = function () { var args = Array.prototype.slice.call(arguments, 0); // url data 一致, // 應(yīng)該將 url取出,data按鍵值排序,后將值拼接在一起,進(jìn)行sha1得到的值作為指紋 // 累先用 url作為指紋吧 var hash = typeof args[0] === 'string'?args[0]:args[0].url; if (typeof ajaxState[hash] !== 'undefined') { if (ajaxState[hash] > 3) { alert('請(qǐng)不要重復(fù)提交,請(qǐng)求正在處理中'); } ++ajaxState[hash]; return $.Deferred(); } ajaxState[hash] = 1; var def = ajax.apply($,args); def.done(function () { delete ajaxState[hash]; }); return def; }; $.ajax = kinhomAjax; })(jQuery);
以上所述是小編給大家介紹的JS Ajax請(qǐng)求如何防止重復(fù)提交的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 通過(guò)jquery的ajax請(qǐng)求本地的json文件方法
- js與jQuery終止正在發(fā)送的ajax請(qǐng)求的方法
- Jquery通過(guò)ajax請(qǐng)求NodeJS返回json數(shù)據(jù)實(shí)例
- jquery教程ajax請(qǐng)求json數(shù)據(jù)示例
- 淺析ajax請(qǐng)求json數(shù)據(jù)并用js解析(示例分析)
- js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法
- JS 攔截全局ajax請(qǐng)求實(shí)例解析
- Javascript發(fā)送AJAX請(qǐng)求實(shí)例代碼
- ajax在js中和jQuery中的用法實(shí)例詳解
相關(guān)文章
JavaScript自定義函數(shù)實(shí)現(xiàn)查找兩個(gè)字符串最長(zhǎng)公共子串的方法
這篇文章主要介紹了JavaScript自定義函數(shù)實(shí)現(xiàn)查找兩個(gè)字符串最長(zhǎng)公共子串的方法,涉及javascript針對(duì)字符串的遍歷、比較、查找等相關(guān)操作技巧,需要的朋友可以參考下2016-11-11childNodes.length與children.length的區(qū)別
childNodes.length與children.length的值常不一樣。2009-05-05原生JS實(shí)現(xiàn)鼠標(biāo)滑動(dòng)撒愛(ài)心特效
這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)鼠標(biāo)滑動(dòng)撒愛(ài)心特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10微信小程序事件 bindtap bindinput代碼實(shí)例
這篇文章主要介紹了微信小程序事件 bindtap bindinput代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Javascript中innerHTML用法實(shí)例分析
這篇文章主要介紹了Javascript中innerHTML用法,實(shí)例分析了實(shí)用innerHTML獲取對(duì)應(yīng)元素內(nèi)容的使用技巧,需要的朋友可以參考下2015-01-01js計(jì)算時(shí)間差代碼【包括計(jì)算,天,時(shí),分,秒】
下面小編就為大家?guī)?lái)一篇js計(jì)算時(shí)間差代碼【包括計(jì)算,天,時(shí),分,秒】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04JavaScript編寫(xiě)帶旋轉(zhuǎn)+線(xiàn)條干擾的驗(yàn)證碼腳本實(shí)例
除了普通的可點(diǎn)擊更換的四位驗(yàn)證碼實(shí)現(xiàn),我們這里還展示了更進(jìn)一步的JavaScript編寫(xiě)帶旋轉(zhuǎn)+線(xiàn)條干擾的驗(yàn)證碼腳本實(shí)例,需要的朋友可以參考下2016-05-05