2

假设我有一个 Rails 控制器方法,该方法在用户提交表单时执行。现在,用户提交表单,当方法运行时(并且没有向用户呈现下一页),用户点击“刷新”。会发生什么?该方法会停止运行并重新启动,还是会有另一个线程再次运行该方法?

4

1 回答 1

1

我必须自己找到答案,这就是我发现的(使用 chrome 检查器上的网络选项卡)

浏览器发送以下请求:

  • GET /profile/123/edit(用户打开编辑表单)
  • PUT /profile/123(用户提交表单)

用户点击刷新,导致:

  • 获取 /profile/123/编辑

换句话说,它不会重新提交表单,而是重新调出编辑表单。

现在......如果他们没有点击刷新他们第二次点击提交,那将发送第二次

  • 放置 /profile/123

这将再次调用您的控制器方法。

如果这是一个问题,您可能需要添加一些逻辑来忽略或以其他方式处理后续提交(简单状态机?)。还记得那些电子商务网站在你买东西后会有“不要点击提交两次”之类的消息的日子......他们没有那个逻辑:)

于 2012-11-02T03:48:57.447 回答