解决实时搜索发送ajax请求过多的问题

本文的操作dom基于JQ。

提出问题

实时搜索框的目的是:当用户输入内容时,及时发送给后端ajax请求。
但存在的一个问题是——如果用户输入后发现输错了删除重新输入,那么这段时间内就会出现多余的Ajax请求,过多的后台请求无疑造成了服务器的压力。

如何解决?

思考?当用户在输入的时候,发现误操作和解决误操作的时间一般是500ms以内(这是我个人觉得),我们能不能设置一个时间间隔500ms,如果在这段时间内没有发生用户输入的行为,那么就向后台发送Ajax请求!

解决问题!

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style></style>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
</head>
<body>
 <input type="text" id="input"> 
  <script>
    $('#input').on('keyup',function(e) {
      let t = $('#input').val()
      console.log(t)
    })
  </script>

</body>
</html>

当代码是这样子的时候,输入一个字符便会在控制台上打印一个字符,删除也是如此效果。
对代码进行优化,如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style></style>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" type="text/javascript"></script>
</head>
<body>
 <input type="text" id="input"> 
  <script>
    let timer
    $('#input').on('keyup',function(e) {
      if(timer) clearTimeout(timer)
      timer = setTimeout(() => {
        let t = $('#input').val()
        console.log(t)
      }, 500)
    })
  </script>

</body>
</html>

这样,当你连续输入的时候,不会在控制台上打印出来,延伸到ajax也就是不会不断发送请求,当你输入完毕500ms之后才打印出来(发送请求),以用户500ms的延迟时间来减缓服务器压力,对用户的影响微乎其微。

注意:timer必须在事件监听之前定义,在内部定义每个事件都有一个timer,其作用域也为相应的事件,因此请求也会不断发生!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值