为了账号安全,请及时绑定邮箱和手机立即绑定

前端频繁请求接口

前端频繁请求接口

九州编程 2019-03-05 16:23:27
在做一个vue项目的时候发现一个问题,就是有一个根据input搜索框的值来查询数据的页面。在快速点击搜索按钮2次或者多次之后。由于网咯的原因。可能导致最后一次点击查询按钮返回的值被前面的请求结果给覆盖了。。这种情况应该怎么解决呢。。只想保留最新一次发起的请求。如果没有这个搜索按钮。只有一个input框(实时搜索)呢?即便是函数截流也会导致这个覆盖的问题(网络延迟)
查看完整描述

5 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

设置一个id,每次开始ajax请求前更新这个id并在scope中保留副本,并取消前次ajax请求。请求结束后查询该id是否与本次请求的id对应,否的话就抛弃本次response
节流函数适合避免短时间内多次请求,但是并不能保证请求返回后按顺序更新UI

查看完整回答
反对 回复 2019-03-14
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

一、对于前端

防止重复点击按钮:可以采用一点击一次后让按钮置灰,暂时不可以用,响应结束后再可以用。
防止重复提交请求:可以采用请求队列的方式,每次请求时检查队列中有无该请求,有则返回,无则提交,并将该请求添加到队列,响应完毕,将响应的请求从队列中移除。

二、安全方面,需要前后端协同处理

推荐您看一下说说API的防重放机制

目前我们公司就采用这些方式!


查看完整回答
反对 回复 2019-03-14
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

锁,点击后,立刻disable掉搜索按钮,结果出来后在去掉disable。或者,程序中加个锁。


查看完整回答
反对 回复 2019-03-14
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

防止重复点击按钮,获取到想要的数据以后,禁用按钮,这样还可以节省流量


查看完整回答
反对 回复 2019-03-14
?
ITMISS

TA贡献1871条经验 获得超8个赞

可以参考redux-saga的思路,takeLatest


查看完整回答
反对 回复 2019-03-14
  • 5 回答
  • 0 关注
  • 1479 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信