I2.08.1failure distinct from empty设计

失败需与空结果明确区分

别名: 失败不是空态 · load error vs empty · 加载失败误当没有

概念解释

请求没回来,和回来了但集合为零,是两种世界。失败是「这次没能知道」;空结果是「知道了,答案是没有」。界面若共用一块「暂无内容」,人会把断网、超时、权限错误读成「这里本来就没东西」,于是停止再试、改去别处建一份已经存在的数据、或以为筛选条件把结果滤光了。加载失败的第一刀是把这两种状态画成不可混淆的两种呈现。

机制

空结果结束的是查询,失败结束的是通道。查询结束,人的下一步是改查询或接受没有;通道结束,人的下一步是修通道或再要一次同一查询。共用视觉把下一步指错:空态插画通常带「去创建」「放宽筛选」,失败需要的是「发生了什么、能否再要一次」。指错之后,创建会撞上其实存在的对象,放宽筛选会掩盖仍然坏着的通道。

失败还有来源:网络、服务器、权限、客户端解析。来源不同,空态更不能冒充——权限失败若画成「你还没有文档」,人会去新建,而不是去要权限。区分不必把内部异常码贴出来,但必须让人能判断「没有」还是「不知道有没有」。

边界

第一次安装、确定无数据的本地库,空就是空,不要为了「万一失败」先画失败皮。搜索的「无匹配」是空结果,同时发生的局部模块失败要另标,不能让整页只剩一句无匹配。缓存里有旧数据时,失败常应让位于「陈旧 + 刷新失败」,那是缓存那一组的呈现,不是把失败画成空。自动化测试和读屏若只听得到「无内容」,会把失败漏掉,区分必须进文本状态,不能只靠插画颜色。

怎么落地

  • 失败与空结果用不同的标题和动作:失败是「无法加载」加就近重试;空是「没有项目」加创建或改筛选。禁止共用一句「暂无数据」。
  • 失败文案回答「不知道有没有」,不要回答「没有」。
  • 权限失败单独成类,不要落入空态模板。
  • 验证:断网打开一个确定有数据的列表。若画面走了空态插画或「去创建」,区分就失败了。再对比一个真的零结果查询,两屏应无法互相冒充。

延伸

  • 同组I2.08.2 重试入口需就近可达 · I2.08.3 局部失败不应导致整页不可用
  • 相邻I2.13 加载失败与重试 · I2.12 缓存与陈旧内容 · E6.06 空状态
  • 站内检索error versus empty · load failure · false empty state

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I2.08.1