uniapp 防止重复提交数据
当用户快速点击按钮时候。我们可以统一在 请求拦截 中做防止重复提交数据的处理
以下是使用uview2封装的request请求
import { autoLogin, getUserInfo } from '@/utils/method.js'
import { refreshToken } from '@/api/login.js'
const serversUrl = require('./serversUrl.js').serversUrl// 白名单
const whiteList = ['/szg-admin/api/app/wxLogin','/szg-admin/api/app/bingMobile','/auth/client/sms/sendCode','/auth/client/smsCode/login'
]module.exports = (vm) => {// 初始化请求配置uni.$u.http.setConfig((defaultConfig) => {// #ifdef H5defaultConfig.baseURL = '/h5api'// #endif// #ifndef H5defaultConfig.baseURL = serversUrldefaultConfig.sslVerify = falsedefaultConfig.firstIpv4 = false// #endif// 要加上这个 Content-type,不然app端请求会得不到响应defaultConfig.header['Content-Type'] = 'application/json;charset=UTF-8'defaultConfig.timeout = 20000return defaultConfig})// 请求拦截uni.$u.http.interceptors.request.use((config) => {// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}config.data = config.data || {}// 防止数据重复提交if (config.method === 'POST' || config.method === 'PUT' || config.method === 'DELETE') {const requestObj = {url: config.url,data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,time: new Date().getTime()}const storageRequestObj = uni.getStorageSync('storageRequestObj')if (!storageRequestObj) {uni.setStorageSync('storageRequestObj', requestObj)} else {const s_url = storageRequestObj.urlconst s_data = storageRequestObj.dataconst s_time = storageRequestObj.time// 间隔时间(ms),小于此时间视为重复提交const interval = 1000if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {return Promise.reject('数据正在处理,请勿重复提交')} else {uni.setStorageSync('storageRequestObj', requestObj)}}}if (whiteList.includes(config.url)) return configconst token = uni.getStorageSync('token')if (token) {config.header.Authorization = `Bearer ${ token }`}return config}, err => {// 可使用async await 做异步操作return Promise.reject(err)})// 响应拦截uni.$u.http.interceptors.response.use((response) => {// console.log('响应拦截==', response);if (response.statusCode === 200 && response.data.code == 401) {uni.showModal({title: '页面停留超时',content: '请重新进入后继续操作',confirmText: '重新进入',showCancel: false,success: async e => {uni.removeStorageSync('token')// #ifdef MP-WEIXINawait autoLogin()// #endif// #ifndef MP-WEIXIN// 如果当前就在登录页面,不进行跳转if (uni.$u.page() != '/pages/login') {uni.navigateTo({ url: '/pages/login' })}// #endifreturn Promise.reject(response.data.msg || '页面停留超时')}})} else if (response.statusCode === 200) {return response.data} else {uni.showModal({title: '温馨提示',content: response.data.msg || response.data.error,showCancel: false})return Promise.reject(response.data.msg)}}, (err) => {// 对响应错误做点什么 statusCode !== 200console.log('<<<<<<响应错误>>>>>>', err)return Promise.reject(err)})
}
数据重复部分,可以直接复制这块代码过去放到你们的项目去
// 防止数据重复提交
if (config.method === 'POST' || config.method === 'PUT' || config.method === 'DELETE') {const requestObj = {url: config.url,data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,time: new Date().getTime()}const storageRequestObj = uni.getStorageSync('storageRequestObj')if (!storageRequestObj) {uni.setStorageSync('storageRequestObj', requestObj)} else {const s_url = storageRequestObj.urlconst s_data = storageRequestObj.dataconst s_time = storageRequestObj.time// 间隔时间(ms),小于此时间视为重复提交const interval = 1000if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {return Promise.reject('数据正在处理,请勿重复提交')} else {uni.setStorageSync('storageRequestObj', requestObj)}}
}
原文作者:uniapp 防止重复提交数据_uni.$u.throttle-CSDN博客
相关文章:
uniapp 防止重复提交数据
当用户快速点击按钮时候。我们可以统一在 请求拦截 中做防止重复提交数据的处理 以下是使用uview2封装的request请求 import { autoLogin, getUserInfo } from /utils/method.js import { refreshToken } from /api/login.js const serversUrl require(./serversUrl.js).ser…...
线程池工具类
线程池简述 为什么需要一个线程池工具类? 答:整个项目,用到线程执行任务的地方很多,不可能哪里用到就在那里直接new一个线程执行,这样资源得不到重复利用,一旦线程过多就会导致内存不足。 线程池的好处是…...
印尼“支付宝” DANA 如何借力 OceanBase 实现3个“关键零”
当前,移动支付在东南亚正迅猛发展,据谷歌、淡马锡与贝恩公司发布的报告预测,东盟地区蓬勃兴起的移动支付市场有望在2030年突破至2万亿美元的交易规模。 在此背景下,DANA作为印尼——东南亚最大经济体中的一员,秉持着推…...
2018-2022 年份微博签到数据集
前阵子接到一个实验室老师的需求,采集五年前(2024-52019)过年前后的北京微博签到数据。 前两年采集的深圳签到数据是 2022 年是当年的尚可,这次虽然时间跨度只有两个月,但是由于时间太过久远,但是颇费了一…...
Avalonia开发实践(二)——开发带边框的Grid
一、开发背景 在实际开发工作中,常常会用到Grid进行布局。为了美观考虑,会给每个格子加上边框,如下图: 原生的Grid虽然有ShowGridLines属性可以控制显示格子之间的线,但线的样式不能定义,可以说此功能非常…...
Java泛型的定义与运用
泛型 泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确…...
Java如何自定义注解及在SpringBoot中的应用
注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说…...
微软 Edge 浏览器全解析
微软 Edge 是微软推出的一个现代化浏览器,继承了 Internet Explorer(IE)的部分功能,但在速度、安全性和兼容性方面做出了很大改进。下面是对微软 Edge 浏览器的详细解析,包括其特点、安装、配置和常见问题的解答。 微软 Edge 浏览器的特点 基于 Chromium 内核 Edge 浏览…...
C++ 八股(1)
C语言中strcpy为什么不安全?如何解决? 主要原因是缺乏对输入长度的边界检查,容易导致缓冲区溢出漏洞。 解决:可以使用strncpy函数替代,或者在程序最顶端加入代码段 #define _CRT_SECURE_NO_WARNINGS 缓冲区溢出 …...
超高精电容传感器PCAP01调试+LABVIEW数据可视化调试手记
PCAP01超高精电容传感芯片STM32LabView可视化 文章目录 PCAP01超高精电容传感芯片STM32LabView可视化一、PCAP01介绍1.1、PCAP01引脚定义1.2、电容测量1.3、温度测量1.4、PCAP典型测试电路 二、PCAP01的STM32驱动2.1、SPI协议配置2.2、PCAP01浮空电容测量内部温度测量操作流程 …...
5.更多
发现一个项目与 MkDocs 类似的项目 PyMdown 拓展文档 ,等待探索。 1.排版模仿 以下网站使用 MkDocs 构建 Material for MkDocs 的美化 - Charles Les Notebook (charleschile.com) Documentation - Home Assistant (home-assistant.io) Godot Docs – master bra…...
ConditionalOnJndi注解使用介绍、应用场景以及示例代码
概述 ConditionalOnJndi 是 Spring Framework 中的一个条件注解,用于在特定的 JNDI (Java Naming and Directory Interface) 环境条件下决定是否创建一个 bean 或配置一个 bean。JNDI 是 Java EE 规范中定义的一种用于访问命名和目录服务的 API,它允许 …...
Spring Cloud 引入
1.单体架构: 定义:所有的功能实现都打包成一个项目 带来的后果: ①后端服务器的压力越来越大,负载越来越高,甚至出现无法访问的情况 ②业务越来越复杂,为了满足用户的需求,单体应用也会越来越…...
自定义波形图View,LayoutInflater动态加载控件保存为本地图片
效果图: 页面布局: <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:la…...
每日一道算法题 求最小公倍数
题目 求最小公倍数_牛客题霸_牛客网 (nowcoder.com) Python 辗转相除法 dividend,divisormap(int,input().split()) #被除数,除数 # remainder0 余数 # 最小公倍数 def lcm(dividend,divisor):# 最大公约数def gcd(dividend,divisor):if 0divisor:return divid…...
【OCC学习18】三维几何对象工具包:TKG3d
【OCC学习18】三维几何对象工具包:TKG3d loveoobaby 已于 2022-08-26 10:10:32 修改 阅读量1.2k 收藏 10 点赞数 1 分类专栏: OpenCascade学习笔记 文章标签: 学习 版权 OpenCascade学习笔记 专栏收录该内容 24 篇文章60 订阅 订阅专栏…...
【Unix】SunOS/Oracle Solaris系统介绍
一.SunOS系统介绍 SunOS 是由 Sun Microsystems 开发的 Unix 操作系统。它最初是为 Sun 的 SPARC 架构计算机设计的,后来也支持了 Intel x86 架构。SunOS 是基于 UNIX System V 4.1 版本,并且随着时间的发展,SunOS 经历了多个版本迭代&#…...
氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享
亲爱的创作者们,大家好!今天我们来聊聊视频创作中至关重要的一点——氛围感。一个好的视频,不仅要有视觉冲击力,还要能够触动观众的情感。那我们应该去哪里寻找这些充满氛围感且高级的视频素材呢?别急,我这…...
基于Java的学生选课系统
第1章 系统概述 1.1概述 背景:随着计算机网络技术的发展,Web 数据库技术已成为应用最为广泛的网站架构基础技术。学生选课系统作为教育单位不可缺少的部分,其内容对于学校的决策者和管理者至关重要。传统的人工管理方式存在效率低、保密性差等…...
802.11漫游流程简单解析与笔记_Part2_05_wpa_supplicant如何通过nl80211控制内核开始关联
最近在进行和802.11漫游有关的工作,需要对wpa_supplicant认证流程和漫游过程有更多的了解,所以通过阅读论文等方式,记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包…...
从网易招聘看技术人择校与城市选择:一线城市VS武汉,哪里机会更多?
技术人择校与城市选择指南:数据驱动的职业发展决策 站在高考志愿填报或考研择校的十字路口,每个怀揣技术梦想的年轻人都面临着一个关键抉择:是追逐一线城市的产业聚集效应,还是选择武汉这类高校密集但名企较少的城市?这…...
医疗AI数据偏见:从耳镜图像分类看模型泛化陷阱与实战避坑指南
1. 项目概述与核心挑战作为一名在医疗AI领域摸爬滚打了十多年的从业者,我见过太多“实验室里天花乱坠,临床上寸步难行”的模型。最近,我和团队深入剖析了一项关于利用人工智能(AI)进行中耳炎耳镜图像分类的研究&#x…...
别再只用XXL-Job了!用Go写的Temporal,搞定延时发短信、定时对账这些复杂工作流真香
从XXL-Job到Temporal:用Go重构复杂工作流的实战指南 如果你正在使用Java系的XXL-Job处理定时任务,却苦于复杂业务逻辑的编排困难,那么是时候认识Temporal了。这个用Go编写的分布式工作流引擎,正在重新定义我们处理延时任务、多步骤…...
AI辅助开发实战:用Electron+React+TS构建跳台滑雪模拟器
1. 项目概述:一个由AI驱动的滑雪跳台模拟器如果你是一个体育游戏迷,尤其是对冬季项目里的跳台滑雪着迷,同时又对现代前端开发技术栈感兴趣,那么这个名为Sj.Sim Predazzo Edition的开源项目,绝对值得你花时间深入研究。…...
AI产品经理转型指南——传统PM如何不被淘汰
文章针对想转型AI产品经理但缺乏经验的人提供了实用的转型路径。首先,文章指出传统产品经理的焦虑源于视角受限,而非技术能力不足,并提出AI无法替代产品经理对用户、业务和组织的深度理解。接着,文章建议转型者从“用AI重做一遍”…...
终极WebPShop插件:解锁Photoshop专业级WebP处理能力
终极WebPShop插件:解锁Photoshop专业级WebP处理能力 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop WebPShop是一款专为Adobe Photoshop设计的开源插件,…...
Claude Code / Cursor 写的代码,你敢直接上线吗?我踩过一次坑,再也不敢
👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事上…...
机器学习模型安全防护与TEE技术实践
1. 机器学习模型安全与完整性挑战概述 在金融风控、医疗诊断等关键领域,机器学习模型的安全与完整性已成为AI落地的首要考量。过去三年中,恶意数据投毒攻击增长了近300%,而预训练模型供应链中的安全漏洞更是导致了多起重大数据泄露事件。这些…...
AI安全自动化测试:FuzzyAI模糊测试框架实战指南
1. 项目概述:当AI安全遇上自动化“模糊测试” 在大型语言模型(LLM)如ChatGPT、Claude、Gemini等日益普及的今天,我们享受其强大能力的同时,也面临着一个严峻的挑战:如何确保它们的安全与可控?你…...
别再死磕外链了:用Python+搜索API实现Google SEO自动化内容生产
做Google SEO的人都有一个共同感受:越来越难了。 以前发发外链、堆堆锚文本就能上去,现在不行了。Google的算法从"匹配关键词"进化到了"匹配搜索意图"。外链权重从60%降到30%,内容质量成了核心排名因素。 但问题是&#…...
