E6.10.3preserve input on error设计
错误页不应丢失用户已输入的内容
别名: 错误丢稿 · 提交失败保留 · unsaved on error
概念解释
提交或保存失败之后,若整页被换成错误页,输入框里那些还没进服务器的字很容易一起被拆掉。不应丢失已输入的内容,指错误呈现不能以销毁本地草稿为代价。用户可以面对失败,但不能被迫把十分钟的编辑再打一遍。这一条不管错误该如何分类,只管失败表面有没有把稿子吃掉。
机制
单页应用里,路由级错误常被做成卸载当前树、挂上一张静态错误页。卸载会丢掉未受控的输入、光标位置、已选文件。人记得自己写过,却在错误页上找不到那些字,失败的代价从「再试一次」变成「工作没了」。即便服务端没收到,本地内存里通常还在;丢失是界面选择把那块内存扔掉。浏览器刷新和真的导航离开才会物理清掉;错误页若模仿成一次导航,就误用了导航的销毁语义。保留稿子让重试有对象可发,返回也有东西可救,错误页的两条出路才接得上已经做过的功。
边界
内容因安全原因不能留在这台设备上(共享电脑上的密码、一次性密钥)失败后应清,并事先说清。文件选择器选出的本地路径有的平台不允许程序记住,错误页至少应说明「需要重新选择文件」,不要假装文件还在。多人同时编辑冲突时,保留的是本地版本,还要能看见服务器版本,不能只藏一份。会话过期的错误常伴随身份切换,稿子要先收到安全的暂存里,再要求登录,而不是登录页把表单顶掉。
怎么落地
- 提交失败时不要卸载带输入的视图;在原表单上显示错误,或错误页叠在仍活着的表单之上。
- 非要换路由时,先把草稿写入可恢复的存储,错误页提供「回到编辑」并带出原文。
- 重试应发送还在本地的那份,而不是一张空表。
- 验证:填一段独特的句子,拔网提交,看那句话还在不在。不在,错误页就在惩罚已经完成的劳动。