点击按钮时"创建或更新"表单行为

Wei*_*ier 8 html browser forms user-experience http

我在网站上有以下工作流程:

  1. 一些用户John Doe通过表单1声明公司(字段:名称,总部位置)
  2. 在John Doe提交(HTTP POST)表单1之后,他被重定向(HTTP 302)到公司表单2,其中包含有关该公司的其他法律信息.

问题是,如果John Doe在第2步中点击浏览器的后退按钮,他将登陆表单1,浏览器填充数据(使用他已经提交的值 - 这就是Firefox和主要浏览器似乎所做的事情).

John Doe可能会认为他可以使用此表单来更新某些信息(例如修复公司名称中的拼写错误),而他实际上会创建一个新公司,因为我们在服务器端不知道他是否想要申报新公司或更新他刚刚创建的公司.

你知道处理这个问题的简单解决方案吗?

ISt*_*ger 1

我认为当用户可以返回到以前的表单并更新它(而不是阻止所描述的行为)时,它对用户更加友好。我在大多数情况下使用类似的方式来处理所描述的问题:

  1. 假设用户位于/some-page包含“创建新公司”按钮的页面上。当用户打开该页面时,将createOrFindCompanyDraft()在服务器端执行特殊方法。此方法在数据库中创建新的公司“草稿”记录(仅适用于当前用户)。例如,草稿记录具有主键id=473。当您再次执行此方法时,它将返回相同的记录id=473(具有“草稿”状态)。“草稿”记录不应显示在任何其他界面上。和“创建新公司”有链接/company/common/473

  2. 当用户转到 时/company/common/473,您将显示表格 1,该表格将从“草稿”记录中填写。用户第一次会看到空表单。从技术上讲,用户将更新现有记录,但您可以在页面上显示“创建新公司”标题。

  3. 然后用户转到表单 2,例如,/company/legal-info/473您为此表单创建类似的草稿记录(与步骤 1 类似)。

  4. 当用户提交表格 2 时,您将从记录id=473(以及任何相关记录)中删除“草稿”状态。

  5. 下次用户打开页面时/some-page,将为当前用户创建新的草稿记录。

浏览器历史记录将包含:

  • /some-page
  • /company/common/473
  • /company/legal-info/473
  • /some-page2

我喜欢这种方法,因为所有表单只更新记录。您可以多次转到上一个/下一个表单(例如“后退”/“前进”浏览器按钮)。您可以关闭浏览器,明天再打开未填写的表格。这种方式不需要对浏览器历史记录进行任何额外的操作。