qq_33331184 2021-09-23 13:52 采纳率: 100%
浏览 86
已结题

关于#javascript#的问题:防止重复点击

请问有没有办法用vue或者原生JS将多个页面统一进行防止重复执行点击事件(在不侵入源事件方法的前提下,因为页面太多是在改不过来),或者进行统一节流处理

  • 写回答

4条回答 默认 最新

  • 技术专家团-剑客 2021-09-23 14:44
    关注

    如果点击事件都有axios请求,你防止的是重复的后端请求,如果是vue单页面项目可以考虑如下的方案:
    1,取消重复请求,具体方法如下,基本思路是缓存,请求结束之后清空缓存

    
    /**
     * 全部请求拦截器处理
     */
    const pendingRequests = new Map()
    
    myAjax.interceptors.request.use(function (config) {
      const params = config.params || config.data
      const requestKey = `${config.url}/${JSON.stringify(params)}&request_type=${config.method}`
    
      if (pendingRequests.has(requestKey)) {
        config.cancelToken = new axios.CancelToken((cancel) => {
          // cancel 函数的参数会作为 promise 的 error 被捕获
          cancel(`重复的请求被主动拦截: ${requestKey}`)
        })
      } else {
        pendingRequests.set(requestKey, config)
        config.requestKey = requestKey
      }
      return config
    },
    function (error) {
      pendingRequests.clear()
      return Promise.reject(error)
    }
    )
    /**
     * 响应拦截器
     */
    myAjax.interceptors.response.use(response => {
      const requestKey = response.config.requestKey
      pendingRequests.delete(requestKey)
      return response
    }, error => {
      pendingRequests.clear()
      return Promise.reject(error)
    })
    

    或者将问题阐述具体一些。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月23日

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元