java如何避免恶意连续点击_浅谈一下如何避免用户多次点击造成的多次请求
浅谈一下如何避免用户多次点击造成的多次请求
一、有效地在web客户端采用一定机制去防止重复点击提交,将大大减轻服务器端压力。
1> 定义标志位:
点击触发请求后,标志位为false量;请求(或者包括请求后具体的业务流程处理)后,标志位为true量。通过标志位来判断用户点击是否具备应有的响应。
2> 卸载及重载绑定事件:
点击触发请求后,卸载点击事件;请求(或者包括请求后具体的业务流程处理)后,重新载入绑定事件。
二、请求频度
相信大家碰到过这样的业务,我们允许它重复点击(或者其他用户事件),但是不允许在一定的时间内超过次数XX次。这从用户友好体验及服务器承受压力选取了一个折中方案。
最合适不过的例子,莫过于关键字搜索匹配了。
var timer = null;
$(input).keyup(function () {
var value = $(this).val();
clearTimeout(timer);
//如果键盘敲击速度太快,小于100毫秒的话就不会向后台发请求,但是最后总会进行一次请求的。
timer = setTimeout(function () {
//触发请求
$.ajax({
url: 'typeahead.do',
type: 'get',
data: value,
success: function () {
//显示匹配结果
//......
}
});
}, 100);
});
三、总结
从宏观意义上来讲,我们需要对每一个按钮去做”防止重复点击提交“,面对这种情况,我们便可以采用一定策略来对其进行封装实现(如定义通用按钮类绑定事件)。
从具体情况上来讲,我们并不需要对每一个按钮都去做”防止重复点击提交“,仅仅需要对某些可能具有复杂后台业务逻辑、或者文件上传、或者调用其他非本工程接口导致网络延迟等等情况需要去做”防止重复点击提交“。与此同时,我们必须要给予用户友好提示(如文本提示、渲染loading条、显示文件上传进度条等等)。两者需要一起来看、一起来做。当然,我们可以单独提取状态显示这个实现逻辑。代码如下——
//全站ajax加载提示
(function ($) {
var str = '
'
' +
'
';
var dom = $(str).prependTo('body');
$(document).ajaxStart(function () {
dom.stop(true, false).queue(function () {
$(this).show().dequeue();
});
})
$(document).ajaxStop(function () {
dom.queue(function () {
$(this).hide().dequeue();
});
});
})(jQuery);
java如何避免恶意连续点击_浅谈一下如何避免用户多次点击造成的多次请求相关推荐
- java程序的装载与检查_浅谈Java类型装载、连接与初始化
类型装载.连接与初始化 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接 ...
- java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...
- java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰
今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...
- java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...
异常处理一般有2种方式,要么捕获异常try-catch,要么抛出异常throws 如果一个方法后面抛出一个运行时期异常(throws RuntimeException),调用者无须处理 如果一个方法后 ...
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...
- java线程池和线程实例化_浅谈Java 线程池原理及使用方式
一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...
- java为什么要分代回收_浅谈Java堆内存分代回收
1.概述 与C++不同的是, 在Java中我们无需关心对象占用空间的释放, 这主要得益于Java中的垃圾处理器(简称GC)帮助我们自动的进行对象占用空间的释放. 下面我们带着几个问题来学习: 堆内存是 ...
- java final类为什么不能继承_浅谈Java之终止继承:Final类和Fianl方法
前言 关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能. Final类 当关键字final用来修饰类时,其含义是该类不能再 ...
- java守护线程的使用场景_浅谈Java守护线程
一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...
最新文章
- 矩阵相关概念的物理意义
- tunctl used bridge sub interface network used with multi-network env
- binder-JAVA层机制
- 一个员工的离职,背后都意味着什么?
- 第七周实践项目6 停车场模拟(栈和队列综合)
- Vue中使用Axios传递数组参数给SpringBoot后台时的实现方式
- 德国Renusol进军南非市场 瞄准屋顶光伏
- 计算机学生工学交替报告书,工学交替学生守则
- Linux系统开机启动过程分析
- C#EF中,使用类似于SQL中的% 模糊查询
- Hbase rowkey设计原则,热点问题
- C语言 sizeof 和 strlen 函数区别 - C语言零基础入门教程
- 多浏览器判断,切换及使用
- Confluence 6 配置 workbox 通知
- 字符串匹配问题 ----- KMP算法
- 谁说国产编译器没救了?这个 C/C++ 和 JavaScript 编译器来了 | 程序人生 2020
- XJOI 3281 A * B Problem again 题解
- 在Mac下配置php开发环境:Apache+php+MySql
- 【嵌入式】牧马人G3 电子竞技鼠标拆解分析
- Exception | This means that said other beans do not use the final version of the bean. This is often
热门文章
- 任务调度+资源调度整合(学习笔记)
- java毕业生设计紫陶文化传播与学习交流网站计算机源码+系统+mysql+调试部署+lw
- linux绝育玩客云_绝育老母鸡(玩客云)pt下载浅谈
- 网站实现qq登录(springboot后台)
- fuz 2159 WuYou
- [WriteUp]unctf-web-fuzz_md5
- 微软挑战人工智能的下一个大战场:人类的永续未来
- IDC:微软Windows将于2007年失去统治地位
- ubuntu启动两个mysql_同一台Ubuntu 启动多个mysql
- java 和gps 建立连接_GPS 连接与定位