表单提交后如何捕获 Rails 控制器操作完成

Posted

技术标签:

【中文标题】表单提交后如何捕获 Rails 控制器操作完成【英文标题】:How to catch Rails controller action completion after form submit 【发布时间】:2018-04-05 22:39:19 【问题描述】:

我有一个 form_tag <%= form_tag(recommend_path, :method => "get", :id => "form") do %> 可以正常工作并重定向到下一页(recommend_path)。 Recommend 控制器(表单提交后加载的页面(非 Ajax)在加载下一页之前有一些非常长的分析操作(大约需要 10 秒)。

我想要实现的是在控制器操作完成时使用加载器添加覆盖。我已经成功添加了带有加载器的叠加层,但它只持续到表单提交完成。简而言之,在单击提交按钮后,带有加载程序的叠加层会根据需要激活,但在表单提交完成后消失(仅需要 1-2 秒)并且表单页面保持静止几秒钟(在控制器操作完成时)在转到下一页之前。

我想用 javascript(JQuery) 或其他任何东西来捕捉控制器动作的完成,以便加载器的覆盖一直保持到下一页加载。

注意:我正在使用 TurboLinks。

【问题讨论】:

你能发布你的控制器名称和方法名称吗? 【参考方案1】:

在表单中设置 html 参数如下:

 html: remote: true, id: 'form'

并用 Javascript 捕获它:

$('#form').on('ajax:complete', function(e, response)
# todo
)

【讨论】:

以上是关于表单提交后如何捕获 Rails 控制器操作完成的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 成功发送数据后重新启用表单提交

Rails,如何从控制器提交 PayPal 请求,而不是表单,URL 编码

Rails:从 submit_tag 更改表单操作

如何以及在哪里提交 Rails 上的表单值?

提交已作为对象存在的表单数据(rails3.22)

带有文件上传的 Rails 3 多步骤表单