浅谈一下如何避免用户多次点击造成的多次请求

一、有效地在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如何避免恶意连续点击_浅谈一下如何避免用户多次点击造成的多次请求相关推荐

  1. java程序的装载与检查_浅谈Java类型装载、连接与初始化

    类型装载.连接与初始化 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接 ...

  2. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  3. java中修饰常量的事_浅谈java中的声明常量为什么要用static修饰

    今天定义一个类常量,想着也只有这个类可以用到,就没用static关键字修饰.结果sonar代码检查提示: Rename this field "PERSON_TYPE_USER" ...

  4. java编译异常和运行时异常_浅谈异常结构图、编译期异常和运行期异常的区别...

    异常处理一般有2种方式,要么捕获异常try-catch,要么抛出异常throws 如果一个方法后面抛出一个运行时期异常(throws RuntimeException),调用者无须处理 如果一个方法后 ...

  5. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字

    合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...

  6. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  7. java为什么要分代回收_浅谈Java堆内存分代回收

    1.概述 与C++不同的是, 在Java中我们无需关心对象占用空间的释放, 这主要得益于Java中的垃圾处理器(简称GC)帮助我们自动的进行对象占用空间的释放. 下面我们带着几个问题来学习: 堆内存是 ...

  8. java final类为什么不能继承_浅谈Java之终止继承:Final类和Fianl方法

    前言 关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能. Final类 当关键字final用来修饰类时,其含义是该类不能再 ...

  9. java守护线程的使用场景_浅谈Java守护线程

    一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...

最新文章

  1. 矩阵相关概念的物理意义
  2. tunctl used bridge sub interface network used with multi-network env
  3. binder-JAVA层机制
  4. 一个员工的离职,背后都意味着什么?
  5. 第七周实践项目6 停车场模拟(栈和队列综合)
  6. Vue中使用Axios传递数组参数给SpringBoot后台时的实现方式
  7. 德国Renusol进军南非市场 瞄准屋顶光伏
  8. 计算机学生工学交替报告书,工学交替学生守则
  9. Linux系统开机启动过程分析
  10. C#EF中,使用类似于SQL中的% 模糊查询
  11. Hbase rowkey设计原则,热点问题
  12. C语言 sizeof 和 strlen 函数区别 - C语言零基础入门教程
  13. 多浏览器判断,切换及使用
  14. Confluence 6 配置 workbox 通知
  15. 字符串匹配问题 ----- KMP算法
  16. 谁说国产编译器没救了?这个 C/C++ 和 JavaScript 编译器来了 | 程序人生 2020
  17. XJOI 3281 A * B Problem again 题解
  18. 在Mac下配置php开发环境:Apache+php+MySql
  19. 【嵌入式】牧马人G3 电子竞技鼠标拆解分析
  20. Exception | This means that said other beans do not use the final version of the bean. This is often

热门文章

  1. 任务调度+资源调度整合(学习笔记)
  2. java毕业生设计紫陶文化传播与学习交流网站计算机源码+系统+mysql+调试部署+lw
  3. linux绝育玩客云_绝育老母鸡(玩客云)pt下载浅谈
  4. 网站实现qq登录(springboot后台)
  5. fuz 2159 WuYou
  6. [WriteUp]unctf-web-fuzz_md5
  7. 微软挑战人工智能的下一个大战场:人类的永续未来
  8. IDC:微软Windows将于2007年失去统治地位
  9. ubuntu启动两个mysql_同一台Ubuntu 启动多个mysql
  10. java 和gps 建立连接_GPS 连接与定位