4

我一直在搜索,无法弄清楚为什么这不起作用。

我正在尝试测试一个非常基本的 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>

提交.js.erb

console.log('committed');
$('#message').html("committed"); 

问题是我会使用 commit 方法,但是页面会重新加载,这违背了 remote=>true 的观点而且 commit.js 似乎从未被调用过。

注意 1:如果我排除这一行,我会得到 /commit 的空白页。包含它会使页面重新加载
注2:我已经尝试了其他SO帖子建议的这两种方法
注3:我已经尝试过使用link_to和form_tag

任何人都可以帮忙吗?谢谢!

4

1 回答 1

4

你为什么放两条线?

    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.

于 2012-05-10T12:08:18.950 回答