我一直在搜索,无法弄清楚为什么这不起作用。
我正在尝试测试一个非常基本的ajax动作。这是我的代码:
控制器:
def commit
respond_to do |format|
format.html { redirect_to :action => "index" } # see note 1
format.js { render :layout => false } # see note 2
format.js { render :nothing => true }
end
end
查看:
<%= link_to "commit", :action => "commit", :remote => true %>
<%= form_tag( :action => "commit", :remote => true, :method => :post) do %>
<%= submit_tag "commit" %>
<% end %>
<div id='message'></div>
commit.js.erb
console.log('committed');
$('#message').html("committed");
问题是我要使用commit方法,但页面会重新加载,这会使remote =&gt; true失败 也似乎没有调用commit.js。
注1:如果我排除了这一行,我将空白页面提交给/ commit。包括它使页面只是重新加载
注2:我尝试过其他SO帖子建议的这两种方法
注3:我尝试过使用link_to和form_tag
有人可以帮忙吗?谢谢!
答案 0 :(得分:4)
你为什么要放2条线?
format.js { render :layout => false } # see note 2
format.js { render :nothing => true }
删除第二个!
替换:
<%= link_to "commit", :action => "commit", :remote => true %>
使用:
<%= link_to "commit", commit_path, :remote => true %>
<小时/> 形式相同:
制作你的:
<%= form_tag( :action => "commit", :remote => true, :method => :post) do %>
为:
<%= form_tag(commit_path, :remote => true) do %>
注意:POST
是默认行为,您可以在form_tag
中省略它。