微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理

前言:

  小程序开发中诸如获取用户手机号码、调起微信支付、领取卡券等api都是会有一定的延迟的。也就是说通过点击按钮调用这些api的时候,从点击按钮调用api,到支付页面或者领取卡券界面展示出来是需要一定时间的,连续点击按钮,还是有可能会重复调用的。

  虽然这种情况有点极端,正常用户是不会这么连续快速的点击按钮的,但是也不能排除有用户手抖,连续点了两下。如果重复调用的话,不仅体验不好,单击事件中涉及到后端接口操作的也可能引起其他异常。所以这个问题还是要处理下的。

  刚开始想到的是使用loading开启模板来防止点击穿透,结果发现loading从调用到蒙板起作用也是需要一定时间的,还是解决不了这个问题(自定义loading加蒙板防点击穿透应该可以的)。后边就想到了采用给按钮添加启用/禁用状态来控制按钮点击的频率——点击按钮,按钮状态设置为禁用,一定时间之后,启用按钮可用状态。经多次验证,此法可行。

处理方法:

1. 设置按钮可用状态:

Page({
  data: {
    disabled: false //购买按钮是否可用,按钮默认可用,点击一次后置为不可用,一定时间之后恢复可用
  },
  /**
   * 购买按钮点击防重:禁用/启用
   */
  buyBtnDisable: function() {
    this.setData({
      disabled: true
    })
    var self = this
    setTimeout(function() {
      self.setData({
        disabled: false
      })
    }, 1000)
  }
})

在每一个调用小程序api的按钮单击事件中先调用这个函数,则一定时间之内,这个按钮是禁用状态,就不会再重现重复点及的问题了。

2. 自定义loading:

创建模板或组件loading,在页面中直接使用该模板替代微信loading组件就好了,由于:

loading.wxml

<template name="loading">
<view class=‘loading‘>
<view class=‘bg‘>
  <image src=‘https://lg-gc2dnftu-1257370699.cos.ap-shanghai.myqcloud.com/timg.gif‘ width="100" height="100"></image>
 </view>
</view>
</template>

loading.wxss

.loading{
  position: absolute;
  top:0;
  left:0;
  width:100%;
  height:100%;
}
.bg{
  background: rgba(0,0,0,0.7);
  width:200rpx;
  height:200rpx;
  margin:50% auto;
  border-radius: 10rpx;
  padding-top:70rpx;
  box-sizing: border-box;
}
.loading image{
  display: block;
  width:60rpx;
  height:60rpx;
  margin:0 auto;
}

这样就可以使用自定义loading替代微信小程序原生loading了,经验证,此方法能解决多次点击按钮重复调用api的问题。

关于模板具体使用详见:https://www.cnblogs.com/xyyt/p/9559326.html

结语:

  经验证,上边两种方法都能有效解决按钮连续点击重复调用微信api的问题,且两种方法都需要放在单击事件的开头在单击事件中先行运行。

  采用设置按钮状态的方法比较独立,只需要在单击事件开头就调用函数就好,函数会在指定时间之后恢复按钮的可点击状态,不会对后续代码有太大影响(但是这种方法会暂时屏蔽按钮的启用状态,指定时间内再次点击是无效的)。

  采用自定义loading方式是使用蒙版覆盖了按钮,本质上未对按钮做任何修改,只是在loading展示的期间无法点击而已。缺点就是在后续的代码中关闭loading,loading的关闭也是需要一定时间的。如果是调用获取用户手机号码授权的api,取消授权的时候关闭loading,则会在取消之后,loading还会显示一下再消失,体验有点不太好。

综上,上边两种方法各有优劣,可以根据自己的需要选择使用。

  

原文地址:https://www.cnblogs.com/xyyt/p/9708770.html

时间: 2024-08-24 01:17:20

微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理的相关文章

微信小程序开发——点击按钮退出小程序的实现

微信小程序官方是没有提供退出的API的,但是在navigator这个组件中,是有退出这个功能的:详情参考官方文档:navigator.示例代码:1 navigator open-type="exit" target="miniProgram"关闭小程序/navigator不过这个 ... 微信小程序官方是没有提供退出的API的,但是在navigator这个组件中,是有退出这个功能的: 详情参考官方文档:navigator. 示例代码: 不过这个功能最低支持版本时 2

微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint

微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下面api文档介绍: 按照示例插入文字小程序和图片小程序都没问题,但是插入卡片小程序却是一直报错errcode=45166,errmsg = invalid content hint.检查了好长时间,才发现卡片小程序的示例中data-progarm-imageurl参数写错了,应该是data-mini

小程序点击按钮退出小程序

很简单的只要把文档看详细了就ok <navigator hover-class="none" target="miniProgram" open-type="exit"> 退出当前小程序</navigator> 原文地址:https://www.cnblogs.com/MicKing/p/10773389.html

CRM 客户端程序开发:自定义系统标准按钮的可用性

一般是新建一个解决方案用于客制化命令栏和Ribbon区,我这里是新建了一个 RibbonEditor的解决方案,然后将你要修改的实体加入进来. 我这里是选择 报价单 实体,然后点击 确定 按钮. 在 CRM > 设置 > 解决方案页面 点击 自定义 图标. 选择前面建立的解决方案,然后点击 OK 按钮. 确保选择的选项卡是Command Bar,因为我这里要修改的实体是Dynamics CRM 2013版本中的更新的实体.在 ENTITIES 中选择你要修改的实体,上面部分就会更新成你选择实体

点击button触发onclick事件判空后依旧自动跳转

这是一个前端的问题. 其中判断字符串为空的脚本代码是这样的: var remark = $("#Remark").val(); //判空.注意:var reg = /空格/g; var reg = / /g; var tmp = remark.replace(reg, ""); 先把所有空格去除,通过判断tmp是否为空来判断文本框是否为空. 问题是这样的:我点击button后,触发js脚本判断input框是否为空,如果为空就提示出错.否则提交表单. 结果是这样的:我

微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理) 异常解析: 1. getPhoneNumber的使用: 对于 getPhoneNumber(OBJECT) API,由于小程序需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发(具体使用方法详见getP

微信小程序开发公测,小程序账号申请办法攻略

11月3号晚上 10 点,微信公众平台发布公告,宣布微信小程序正式开放公测.此次小程序公测允许开发者将产品提交至微信公众平台审核,但是暂时不支持发布,也就是说普通消费者若想体验小程序,还需要等待一段时间. 什么人可以参与小程序公测? 微信小程序的公测暂时只开放给企业.政府.媒体.其他组织,个人微信公众号暂时无法参与小程序公测. 此次公测开放的内容包括: 开发支持:提供一系列工具帮助开发者快速接入并完成小程序开发: 开发文档:介绍小程序的开发框架.基础组件.API 及相关开发问题: 开发者工具:集

10分钟入门微信小程序开发:从环境搭建到开发出第一个程序。

小程序简介 小程序是一种不需要下载安装即可使用的快速应用,它实现了应用“触手可及”的操作:用户扫一扫或搜一下即可打开应用,完全不需要安装,因此小程序不仅可提高的用户的应用体验,也方便应用的传扩散. 本文带大家快速入门小程开发,了解从环境搭建到开发出一个简单hello world程序,从而上手小程序开发,让你快速成功小程序开发人员.之后,想开发什么样的小程序,就可以自己研究和努力了. 下面,是循序渐经的步骤: ?1.注册小程序 在开发之前,当然需要先注册一个小程序账号. 进入“微信公众平台”进行注

微信小程序开发—小程序开发入门

本篇将为大家详细介绍如何安装小程序开发工具,并进行一个完整小程序的开发. 下载安装微信web开发者工具 下载地址: windows64:https://servicewechat.com/wxa-dev-logic/download_redirect?type=x64 windows32:https://servicewechat.com/wxa-dev-logic/download_redirect?type=ia32 mac:https://servicewechat.com/wxa-dev