E1.17.3unlock on failed submit设计研究
网络失败后需要解锁按钮并呈现明确的错误状态
别名: 失败解锁 · 提交错误态 · stuck disabled
概念解释
锁是为了请求在路上时挡住第二下。请求失败——超时、4xx、断网——锁必须解开,并且按钮或邻近位置要进入明确的错误状态,而不是默默回到默认,也不是永远转圈。失败后仍锁着,人只能杀应用;失败后解锁却看起来像什么都没发生,人会再点,这没问题,但若没有错误说明,第二次和第一次的失败原因都看不见。
机制
失败把「进行中」这个相位结束了,按钮必须回到可发送。若失败被当成「还在加载」,转圈无限,用户的心智模型是系统死了。若失败只解锁、不改文案也不出提示,界面与默认无法区分,用户不知道该改表单还是该再试,容易在同一错误上连点。错误状态要回答三件事:没成功、为什么(能说的部分)、现在可以再试。解锁是行为,错误是外观与文案;只做一件等于半残。超时尤其阴险:客户端已失败,服务器可能稍后成功,解锁后再发会双写——失败路径仍要带去重令牌,但不能因此不解锁。
怎么研究
把提交接口做成超时、400、断网三种失败。对照:失败后仍转圈、失败后回到默认无提示、失败后解锁并显示错误。
自变量:失败类型、是否解锁、错误是否出现在按钮旁。 因变量:重试次数、杀应用、能否说出失败原因、重复成功(超时后的幽灵写)。
实验室给「这是一次失败测试」会让人等待。要用看起来像真付款的流程,才看得到杀应用。
边界
鉴权失败有时应锁死并改走登录,而不是解开让人再付一次。幂等重试可以自动再发,按钮可保持加载,但要有次数上限和最终错误。离线排队不是失败,应改成「将在联网后发送」,不要用错误红。部分成功(批量里几条失败)解锁后要能指向失败项,而不是整枚按钮一句「出错」。
怎么落地
- 在 catch / 超时分支里同步解锁,把按钮从加载拉到错误外观,文案说明可再试。
- 错误不要只用颜色;按钮旁或按钮内用文字。
- 带上请求令牌,避免超时失败后的重试与迟到的成功撞车。
- 验证:断开网络点提交。转圈必须停、按钮可再点、能读到失败原因。仍转圈或静默回到默认,失败路径就没做完。