![](/img/trans.png)
[英]On Form submission PHP file opens as a new page rather than executing script
[英]Rails form, load new record page rather than redirecting to it
我正在用Rails创建我的第一个应用程序。 基本上,我有一个新的客户表单,通常在您输入新客户时,您将被重定向到您创建的记录。
但是,当我通过ajax加载我的所有页面时,我想加载新记录,而不是重定向到它。
我已经通过ajax触发了表单,我只需要知道如何访问新记录URL即可将其加载到我的容器中。
希望有道理。 提前致谢!
您可以在form_for helper方法中添加一个:remote => true选项,以便通过Ajax发布表单而不是页面重定向。 对于Ex:
<%= form_for(@post, :remote => true) do |f| %>
...
<% end %>
然后创建一个名为create.js.erb的新模板,该模板将在执行create方法后呈现。
在此模板中,您可以显示您创建的新记录的详细信息。
对于Ex:
$('some_element').replaceWith('<%=@posts.name %>');
编辑:您提到在JavaScript中使用load。 我通常会避免这种情况,因为您要进行两次服务器往返。 1)创建2)获取html以加载到div中。 此外,如果发生错误,无论发生什么事情,都将很难捕获并执行“好事”。
将remote:true选项添加到表单后,您需要处理服务器端发生的事情。
假设您使用REST,您将拥有一个带有create动作的控制器。 通常,此方法创建项目,然后返回创建页面的HTML。 取而代之的是,我们需要为该操作创建一个javascript视图。 这将告诉调用页面该操作何时生效。
假设您的表单具有一个名为“ new_record_form”的div,并且您还有另一个名为“ new_records”的div。 您需要清空表单中的表单元素,以有效地对其进行重置。 您还将希望将新记录添加到“ new_records” div中。
要将记录添加到新记录div中,您可以执行以下操作。
$("#new_records").append("#{@new_record.name}");
提交表单时,您应该会看到添加的内容。 调试问题的一种好方法是使用检查器。 如果您使用的是Chrome浏览器,请右键单击任意位置,检查元素并选择网络。 在提交表单之前执行此操作。 您将能够看到ajax调用和响应。 您的日志也将有所帮助。
别忘了也将表格空白。
注意:您提到所有页面都是ajax,但是我强烈建议您评估由于各种问题而导致的100%合理性。 并不是说这是关于该主题的最佳文章 ,但可能值得一读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.