axios不发起请求_重复的ajax请求让人很受伤
重复的ajax请求让人很受伤
重复的ajax请求一波又一波的袭来,服务器正躲在角落里瑟瑟发抖,它内心是崩溃的,这算是遭了罪了, 前端小王子为啥没有做好限制和封锁,真是伤不起啊,哎,不如意事常八九,能与人言无二三...... 以上场景是我们平时在开发中稍微不注意就会重现的,也因此伤了多少服务器的心;我们作为前端开发人员,应该正视而且重视这个问题。在这里,给大家提供以下几种解决方案:
1
UI层面的拦截
当用户动了动发财的小手点击完按钮后,就立即禁用按钮, 并开启等待动画,如果收到服务器的成功响应返回后,再隐藏动画,一定要设置超时,时间不能太长,如果过长,用户会骂街的。
1.$("#submit").prop("disabled",true); //按钮禁用
2.showLoading() //显示动画
3.$.ajax({
...
timeout: 4000, // 设置超时时间
complete:function(){
hideLoading() //隐藏动画
}
})
2
JS层面的封锁
(1) 暴力点击如果用户连续暴力点击按钮,我们可以通过函数防抖来做,其实就是闭包里的setTimeout 与clearTimeout结合使用, 连续的点击会把上一次点击处理函数清掉,我们的 ajax请求会在最后一次点击后再发出去。
obtn.onclick = (function(){
var timer;
return function(){
if(timer){
clearTimeout(timer)
}
timer= setTimeout(() => {
console.log("ajax发送; 查询结果")
}, 500)
}
})()
(2)多tab页快速切换
多个tab页 快速切换也是常见的场景,如果用户从tab1快速切换到tab2,再从tab2快速切换到tab1,不避免的同一个tab 要重复发起多次请求。还有一个问题就是,在单页面应用中,切换tab后dom 结构销毁了,此时数据回来了,如果去操作了已经销毁的dom,那么控制台会报错。而在vue ,react 等不需要开发者手动操作的dom的框架,如果我们去修改状态,还会报出如下的警告信息,这就很难看了。
解决这个问题的思路就是abort掉上一个请求。XMLHttpRequest对象有abort方法,可以直接调用。如果使用第三方的请求库的话,比如axios,我们可以为我们的请求创建一个cancel token ,在每个请求设置一个token,在页面切换, 或者组件销毁前,只需要通过source.cancel取消就好了,其实原理还是通过xhr的abort方法实现。具体的代码以及流程可以参考如下。
var CancelToken = axios.CancelToken;
var source = CancelToken.source();
axios.get('/user/12345', {
cancelToken: source.token
}).catch(function(thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// handle error
}
});
// cancel the request (the message parameter is optional)
source.cancel('Operation canceled by the user.');
不同的使用场景,我们可以灵活的组合以上的解决方案, 不知道这样做的话,是否能挽回服务器的心,我又想起了夕阳下的奔跑,那是我与服务器美好邂逅,也是我们逝去的青春......
更多推荐
- decorator 装饰器
- 如何讲清楚闭包?
- 如何讲清楚JS原型链?
- 如何讲清楚async和await?
- 如何讲清楚Promise?
- 开发Web应用为啥要使用TypeScript?
苦逼的日子,有你真好看见这个分享了吗,点它
axios不发起请求_重复的ajax请求让人很受伤相关推荐
- ajax请求_重复的ajax请求让人很受伤
重复的ajax请求让人很受伤 重复的ajax请求一波又一波的袭来,服务器正躲在角落里瑟瑟发抖,它内心是崩溃的,这算是遭了罪了, 前端小王子为啥没有做好限制和封锁,真是伤不起啊,哎,不如意事常八九,能与 ...
- tab 触发ajax请求,防止重复发送ajax请求的思索
原标题:防止重复发送ajax请求的思索 防止重复发ajax请求是平时开发中遇到频次较高的问题了.我通常解决方案有如下几种, 1.UI限制 点击完按钮后,就禁用按钮, 并开启显示等待动画,收到服务器的成 ...
- java的ajax请求_[Java教程]ajax请求技术
[Java教程]ajax请求技术 0 2016-07-21 20:00:03 1.写在前面: 阅读要求: 具有一定的HTML.CSS.JavaScript.Json基础 2.什么是ajax Ajax: ...
- axios创建实例对象发送ajax请求_解决一个网页请求多个服务器场景---axios工作笔记009
然后我们再去看看,我们利用 axios去创建实例对象来发送ajax请求 可以看到上面我们创建了一个duanzi的axios对象. 然后我们在这个duanzi的axios对象中,指定默认的baseURL ...
- 如何防止重复发送ajax请求
先来说说重复发送ajax请求带来的问题 - 场景一:用户快速点击按钮,多次相同的请求打到服务器,给服务器造成压力.如果碰到提交表单操作,而且恰好后端没有做兼容处理,那么可能会造成数据库中插入两条及以上 ...
- [js] 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点?
[js] 说说防止重复发送ajax请求的方法有哪些?各自有什么优缺点? // 方法一 防抖function debounce(f, ms) { let time; return function(){ ...
- java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...
- ajax请求如何判断超时,ajax请求超时判断(转载)
ajax请求时有个参数可以借鉴一下 var ajaxTimeOut = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : ' ...
- java接口允许ajax访问_服务允许AJAX请求,允许跨域请求
当工作时间,因为需要JS 进行AJAX请求,这时候存在跨域问题,当出现这种情况时,有多种方案解决比如使用JSONP,也有一种简单的方式,就是在过滤器里面增加返回请求允许跨域head配置. 代码如下: ...
最新文章
- 使用optuna为机器学习模型挑选最优参数进行模型构建实战
- Windows下使用Tesseract进行OCR文字识别
- linux安装.net core3.0,树莓派4安装net core3.0环境
- MongoDB 查询超时异常 SocketTimeoutException
- python人工智能——机器学习——分类算法-朴素贝叶斯算法对新闻进行分类案例
- java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
- python3 批量定义多个变量_Python3 基本数据类型详解
- 使用electron开发指静脉客户端遇到的问题总结
- case 逻辑java,java – 了解CaseInsensitiveComparator中的逻辑
- Atitit.软件仪表盘(8)--os子系统--资源占用监测
- NOIP2020退役记
- 华为模拟器eNSP将防火墙配置成三层核心交换机
- 什么是计算机网络中域名,什么是域名?
- FastReport VCL如何在 Lazarus安装FastReport
- LQ0264 鲁卡斯队列【精度计算】
- Repulsion Loss: Detecting Pedestrians in a Crowd 详解(遮挡下的行人检测)
- 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网
- ExtJS初级教程之ExtJS Tree(三)
- 《深入理解Java虚拟机》-周志明 -第3版-第一章摘记
- Thymeleaf如何使用?