jquery项目中如何进行防重复提交
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章给大家介绍jquery项目中如何进行防重复提交,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在新项目中,axios能实现防重复提交的功能,不过老项目(例如jQuery)的
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
isp数据库
如何把记事本的数据库
数据库中关系特点
黄河水利职业技术学院网络技术
csol添加服务器
wow 好的服务器
如何有效保护数据库的安全
珠海商城软件开发靠谱吗
学校网络安全正能量
文物调查及数据库管理
高校网络安全保障工作组织
http数据库
数据字典对软件开发有影响吗
自建云服务器IDC
上虞手机软件开发联系方式
电脑系统出现无法连接服务器
蔡甸定制软件开发企业
如何确定什么时候使用的服务器
iphone软件开发流程
常用图书期刊论文数据库有哪些
软件开发的技术晋升
imap接收邮件服务器
芝罘区管理系统软件开发企业
浙江网络技术开发概况
苏州程序软件开发大概多少钱
清华大学数据库大作业
签到服务器
上海电商软件开发中心
电脑ntp同步时钟服务器
软件开发助理是做什么工作