防止重复发送Ajax请求问题
在工作中有很多场景需要通过Ajax请求发送数据,像是注册、登录、提交用户反馈等。用户在点击了“确认”按钮之后有可能一段时间内没有收到反馈页面无任何反应,然后就接着连续多次点击“确认”按钮导致发送n个重复的请求,给服务器造成不小压力。
从前端解决重复发送请求的方法是有的。
1、点击“确定”之后禁用该按钮
<input type="button" id="submit-btn">
<script>
var btn=$("#submit-btn");
btn.onclick=function(){
btn.attr('disabled',true)
}
</script>
2、使用变量进行上锁
思路如下:声明变量lock,当lock值为true,禁止再次发送请求,当lock值为false,可以发送请求。在Ajax返回success或者error的回调函数中将lock置为false,也就是说只有当服务器给出响应之后才可以再次发送请求。
var lock=false; //
$('#msg').click(function(){
if(lock) return;
lock=true;
setTimeout(function(){
$.ajax({
url:'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=wise_web',
type:'get',
data:{
'wd':'c'
},
jsonp:'cb',
jsonpCallback:'jshow',
dataType : 'jsonp',
success:function(res){
lock=false;
console.log(res)
},
error:function(){
lock=false;
}
})
});
});
3、设置时间,在规定时间内不允许再次发送请求
和方法二类似,不同点在于决定是否可以再次发送求情的条件是是否超过规定时间(3s、5s或其他时间)。
在最开始,声明变量lock=false。点击“确定”按钮,触发请求并将lock置为true。在规定时间之后(以3s为例)将lock置为false,此时就可以再次发送请求了。
var lock=false;
$btn.on('click',function(){
if(lock){
return;
}
lock=true;
setTimeOut(function(){
lock=false;
},3000) // 3s后将lock设置为false, lock为false时就可以再次发送请求了。。。。。。
$.ajax({
type:'post',
url:'/getdata/info/item.php',
dataType:'json',
data:'data',
success:function(){
....... //xxx操作
},
error:function(){
...... // xxx操作
}
})
当然,具体问题具体分析。结合实际问题适当调整思路才能找到更好的解决方法。
转载:https://blog.csdn.net/jianglittlebai/article/details/79090194
防止重复发送Ajax请求问题的更多相关文章
- 怎样防止重复发送 Ajax 请求?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:长天之云链接:http://www.zhihu.com/question/19805411/answer/15465427来源 ...
- 防止重复发送 Ajax 请求
作者:长天之云链接:http://www.zhihu.com/question/19805411/answer/15465427来源:知乎 不推荐用外部变量锁定或修改按钮状态的方式,因为那样比较难: ...
- 原生js发送ajax请求
堕落了一阵子了,今天打开博客,发现连登录的用户名和密码都不记得了.2016年已过半,不能再这么晃荡下去了. 参加了网易微专业-前端攻城狮 培训,目前进行到大作业开发阶段,感觉举步维艰.但是无论如何,不 ...
- rails中发送ajax请求
最近在写一个blog系统练练手,遇到一个一个问题,用户添加评论的时候想发送ajax请求,但是rails里的ajax和Python中的不太一样,Python中的ajax是用js,jquery实现的和ra ...
- 在发送ajax请求时加时间戳或者随机数去除js缓存
在发送ajax请求的时候,为了保证每次的都与服务器交互,就要传递一个参数每次都不一样,这里就用了时间戳 大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的 ...
- jQuery发送ajax请求
利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...
- JQuery发送ajax请求不能用数组作为参数
JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){ var select ...
- js中使用队列发送ajax请求
最近,项目中需要按照先后顺序发送ajax请求,并且在一次请求结束后才能发起下一次,不然就会导致逻辑错误. 解决办法是定义一个数组,保存ajax请求数据. 以下使用extjs4定义一个类 Ext.def ...
- IE6下a标签上发送ajax请求总是error
IE6下真是处处是坑啊!!!走过了一个又一个坑,记录一下吧. 之前不知道a标签上注册click事件之后,发送ajax请求总是error.后来经过几番网上搜索,终于找到高人遇到此坑的解决办法.原来是a标 ...
随机推荐
- «»<>
空格 «双小于 »双大于 <小于 >大于
- webpack4.41.0配置四(热替换)
每次修改都要去编译,这个操作比较繁琐.所以我们希望编译过程是自动化的,而且页面的更新也是自动化的.所以需要使用这个热替换 1.首先安装webpack-dev-server:npm install w ...
- php对字符串的操作
php最文字的处理很是强大,之前一直云里雾里,这次学习一下. 1,' 与 ”的区别 <?php //双引号中的特殊字符会被解析 echo "你好\t我好";echo &quo ...
- ASP.NET的 Razor引擎和JavaScript是一种什么关系
Razor能做的JS大部分能做,不是全部.比如说,如果你用了Entity Frame一类的ORM的时候,Razor可以直接绑定数据库数据,但JS就不可能直接访问数据库——必须通过其他web servi ...
- expect 脚本
实现远程执行 /home/dataexa/test/proxy.expect touch proxy.expect #!/usr/bin/expect set timeout 30 spawn ssh ...
- paramiko-tools
own dev # coding=utf-8 import paramiko import os import logging import json import unittest from sta ...
- 粪发涂墙-Redis
Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...
- 你知道for(;;) vs. while(true)那个更快吗?
来来来, for(;;) vs. while(true) 有什么区别?从java的语义上来说,他们是一模一样的.为何怎么说? 开始我们先测试for(;;) package com.tony.test; ...
- C语言笔记 10_文件读写&预处理器
文件读写 上一章我们讲解了 C 语言处理的标准输入和输出设备.本章我们将介绍 C 程序员如何创建.打开.关闭文本文件或二进制文件. 一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节.C ...
- python中 使用join()方法
使用join()方法 对各种数据类型中元的素进行合并拼接 "连接符".join(列表或元组或字符串或字典) 返回的是一个使用连接符进行拼接的字符串 如果对象是列表,元组,就是以一个 ...