2012-01-14 154 views
1

使用Ruby on Rails 3,我有一个包含注释列表的页面,并且我希望在用户按下注释的回复按钮时使用ajax显示表单。Rails 3,处理ajax响应

到目前为止,我有一个名为_form_comment.html.erb的部分,其中包含表单的html。这没有问题。

在视图中,这是为答复按钮的代码:

link_to "Reply", {:controller => "catalog", :action => "form_comment", :id => c.id}, :remote => true, :class => "btn_reply_comment" 

在控制器中,我已经添加该动作,每当按下答复按钮,返回部分:

def form_comment 
    if request.xhr? 
     render:partial => "form_comment" 
    end 
end 

而且,以“做什么”的响应,我有此脚本

$(document).ready(function(){ 
    $(".btn_reply_comment") 
     .bind("ajax:success", 
       function() { alert("Ajax response"); }); 
}); 

当我按回复按钮,我可以检查,使用Firebug,ajax请求返回304 not modified代码。我读过一些其他线程说我应该禁用ajax请求中的缓存,但由于我没有手动使用$.ajax...,我不知道如何修改它。

我该怎么办?

回答

1

我认为你必须绑定到由link_to助手创建的窗体上的“ajax:success”事件,而不是“a”链接元素。

所以尝试绑定到:

".btn_reply_comment form" 

无论如何,我建议使用一个正常的link_to或“a”元素,以及一些jQuery代码,使AJAX请求和处理回调,如:

$(".btn_reply_comment").on("click", function(){ 
    $.get($(this).attr("href"), function(data){ 
    eval(data) 
    }) 
}) 

ps:“on”要求jquery> = 1.7,如果您没有使用“绑定”