我有一个远程表单,并提交search
操作。在content#search
内,我有以下内容:
respond_to do |format|
#format.html {}
format.js {}
end
我有一个search.js.erb
文件,其中包含以下内容:
$('#ajaxstuffhere').html("<%= escape_javascript(render :partial => 'search') %>");
不幸的是,这根本不会修改主页面中的div
。
当我取消评论format.html {}
时,它会使用div
内容更新search.html.erb
。不幸的是,这会使用控制器的默认布局进行渲染。
我想要的是在没有布局的情况下渲染此内容。 理想使用javascript,因此我可以在此过程中更新一些Google地图标记。
此表单代码:
<%= form_tag({:action => 'search'},:id => 'searchForm', :remote => true) do %>
生成此输出:
<form accept-charset="UTF-8" action="/search" data-remote="true" id="searchForm" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"></div>
任何人都可以告诉我缺少什么吗?
编辑:我在想...如果部分以HTML格式返回,我会点击javascript来捕捉响应,所以我可以在那里更新谷歌地图。无论哪种方式都是好的,只要布局消失(我仍然更喜欢js.erb方式)。
javascript响应的服务器日志说明如下:
Rendered content/_search.html.erb (270.5ms)
Rendered content/search.js.erb within layouts/content (274.1ms)
但该页面根本没有更新。它似乎是在点击javascript而且部分似乎被称为
答案 0 :(得分:3)
确保页面上存在id为ajaxstuffhere的元素。将要呈现的HTML放在_search.html.erb中。然后渲染没有布局:
format.js { render layout: false }
尝试使用chrome开发人员工具调试任何问题。使用网络选项卡查看实际响应,控制台将标记任何js错误。
另一种方法是将html partial作为Ajax响应呈现并绑定到搜索表单的Ajax成功操作。