无法在Rails 3.0.3中远程提交FORM?

时间:2011-02-02 23:46:37

标签: jquery ajax ruby-on-rails-3 ujs

我正在使用带有jQuery ujs的Rails 3.0.3。

我想远程发送表单。包含表单的视图模板 mains / index.html.erb 如下所示:

...
<%= form_tag :remote => true, :controller => "mains", :action => "search", :format => :js do %>
<div class="dialog">
<table>
<tbody>
<tr class="prop">
<td valign="top" class="name">
 <%= label_tag(:location_start, "Location Start:") %>
</td>
<td valign="top">
<%= text_field_tag(:location_start) %>
</td>
...
</tbody>
</table>
</div>
<div class="buttons">
<span class="button"><%= submit_tag("Search") %></span>
</div>
<% end %>
...

控制器 mains_controller.rb 看起来如下(删除了不必要的东西):

class MainsController < ApplicationController

def index
  respond_to do |format|
    format.html # index.html.erb
  end
end

def search
  respond_to do |format|
    format.js { render :template => 'mains/search.js.erb'}
  end
end

end

视图模板 mains / search.js.erb 包含以下内容:

$('#search').html("<h1>Headline</h1>");

我使用search.js.erb而不是search.js.rjs,因为使用Rails(4h版)的Agile Web开发中的“26.4少写和用JQuery做更多”一章中的说明。我还添加了:format =&gt; :js 归因于https://github.com/rails/jquery-ujs/issues/closed/#issue/52

当我致电 http://0.0.0.0:3000/mains/index 并提交表单时,实际上并未远程提交,但浏览器会加载 http://0.0。相反,0.0:3000 / mains / search.js?remote = true 。浏览器输出$('#search').html("<h1>Headline</h1>");,而不是通过用给定的<h1>Headline</h1>替换div #search来执行JavaScript。

我试图找到一个解决方案,但到目前为止还没有成功......有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

通过将<%= form_tag :remote => true, :controller => "mains", :action => "search", :format => :js do %>替换为<%= form_tag( {:controller => "mains", :action => "search"}, :remote => true ) do %>并更新到最新版本的jQuery ujs来解决问题......