0

我有一个远程表单,它提交给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,所以我可以沿途更新一些谷歌地图标记。

此表单代码:

<%= 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,并且部分似乎被调用了

4

1 回答 1

3

确保页面上存在 id 为 ajaxstuffhere 的元素。将要呈现的 HTML 放在 _search.html.erb 中。然后在没有布局的情况下渲染:

format.js { render layout: false }

尝试使用 chrome 开发者工具来调试任何问题。使用网络选项卡查看实际响应,控制台将标记任何 js 错误。

另一种方法是将 html 部分呈现为 Ajax 响应并绑定到搜索表单的 Ajax 成功操作。

于 2013-10-04T21:31:44.530 回答