2012-01-14 3 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

Я думаю, вам нужно привязать к событию «ajax: success» в форме, созданной помощником link_to, а не на элементе ссылки «a».

так пытаются привязать к:

".btn_reply_comment form" 

Во всяком случае я предлагаю использовать обычный link_to или «а» элемент, а некоторые JQuery код, чтобы сделать запрос AJAX и обработки обратного вызова, как:

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

ps: «on» требует jquery> = 1.7, если у вас его нет, используйте «bind»

Смежные вопросы