jquery项目中如何进行防重复提交
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍jquery项目中如何进行防重复提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的
千家信息网最后更新 2026年11月01日jquery项目中如何进行防重复提交
这篇文章给大家介绍jquery项目中如何进行防重复提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的项目中,没有axios。但是导入Ajax-hook
就可以实现
Ajax-hook源码地址 : https://github.com/wendux/Ajax-hook
导入
ah对象是在导入ajaxhook.min.js后就会出现的,使用:
ah.proxy({ //请求发起前进入 onRequest: (config, handler) => { console.log(config.url) handler.next(config); }, //请求发生错误时进入,比如超时;注意,不包括http状态码错误,如404仍然会认为请求成功 onError: (err, handler) => { console.log(err.type) handler.next(err) }, //请求成功后进入 onResponse: (response, handler) => { console.log(response.response) handler.next(response) }})其中,config.method为ajax请求的方式(GET/POST),config.url为请求的路径。onError中的err对象和onResponse中的response可以通过err.config.method/response.config.method来获得ajax的请求方式。
我稍微封装了一下,实现防重复提交的js文件,亲测有效,朋友们可以后再测试一下,欢迎各路大神谈论和指出不足。
```javascriptfunction laodJS(url, callback) { var script = document.createElement('script'); fn = callback || function() {}; script.type = 'text/javascript'; script.defer = true; // IE if (script.readyState) { script.onreadystatechange = function() { if (script.readyState == 'loaded' || script.readyState == 'complete') { script.onreadystatechange = null; fn(); } } } else { // 其他浏览器 script.onload = function() { fn(); } } script.src = url; document.getElementsByTagName('body')[0].appendChild(script);}laodJS('https://unpkg.com/ajax-hook@2.0.3/dist/ajaxhook.min.js', function() { let ajaxArr = [] ah.proxy({ //请求发起前进入 onRequest: (config, handler) => { var id = config.method + config.url if (ajaxArr.indexOf(id) === -1) { // 给每个请求设置唯一ID,push到ajaxArr里。在请求完成时再移除那个项 ajaxArr.push(id) handler.next(config); } else { return handler.reject() } }, //请求发生错误时进入,比如超时;注意,不包括http状态码错误,如404仍然会认为请求成功 onError: (err, handler) => { var id = err.config.method + err.config.url if (ajaxArr.indexOf(id) !== -1) { ajaxArr.splice(ajaxArr.indexOf(id), 1) } handler.next(err) }, //请求成功后进入 onResponse: (response, handler) => { var id = response.config.method + response.config.url if (ajaxArr.indexOf(id) !== -1) { ajaxArr.splice(ajaxArr.indexOf(id), 1) } handler.next(response) } })})直接在全局中引入这个文件就可以了,我这个文件命名为preventRepeatSubmission.js。
我的HTML代码:
Document This is index Page
我的服务器使用koa2搭建的,代码如下:
const Koa = require('koa');const Router = require('koa-router');const app = new Koa();const router = new Router();router .get('/', (ctx, next) => { ctx.body = 'hello jspang
'; }) .get('/home', async (ctx, next) => { // ctx.body = 'This is home Page
' async function delay(time) { return new Promise(function(resolve, reject) { setTimeout(function(){ resolve(); }, time); }); }; await delay(5000); const url = ctx.url; // 在request中获取get请求参数 const request = ctx.request; const request_query = request.query; const request_querystring = request.querystring; // 在ctx中获取get请求的参数 const ctx_query = ctx.query; const ctx_querystring = ctx.querystring; ctx.body = {url, request_query, request_querystring, ctx_query, ctx_querystring}; ctx.response.body = {status:200, msg:'已经成功获得参数'}; })app .use(router.routes()) // 向app中装载路由 .use(router.allowedMethods()) // 装载中间件app.listen(3000, () => { console.log('[Demo] is running at port 3000');});浏览器测试效果:
按下图中的button就会发起一次ajax请求,我的服务器是延迟响应5s的,在这延迟5s期间,我有点击了20次button,发起相同的20次ajax被成功拦截了,效果不错。
关于jquery项目中如何进行防重复提交就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
成功
项目
错误
参数
文件
页面
不错
代码
内容
后进
对象
效果
方式
更多
服务器
浏览器
状态
帮助
延迟
服务
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网与科技发展
互联网的科技创新
喔噻互联网科技
鑫亿盛互联网科技
顺玮阁互联网科技
互联网科技论坛
四川狮子座互联网科技
互联网科技英文翻译
互联网科技热点资讯
上海宁丞科技互联网
彤创互联网科技有限公司
杭州壁岐互联网科技有限公司
坤平互联网科技
健康食品互联网创新科技园项目
中国科技创新与世界互联网大会
互联网新科技动漫ppt素材
伍佰万互联网科技怎么赚钱
城市宝互联网科技有限公司
福州德业互联网科技
张家口科技产业互联网平台
花魁咖啡
广东万易互联网科技有限公司惠州分公司
科技服务与互联网
互联网 科技创业
广州凡科互联网科技
广州善班互联网科技
互联网高科技股票
湖南诚度互联网科技有限公司
互联网公司属于科技吗
北京品多多互联网科技有限公司