Javascript RubyonRails中的Ajax成功回调

Javascript RubyonRails中的Ajax成功回调,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我想在RubyonRails教程中实现ajax,控制器将在处理ajax请求时返回一个对象。我不知道如何处理javascript文件中的响应。 我想根据javascript文件中返回的对象更新一些div 以下是我在showcomments.js.erb中写的内容 $('.show_comment').bind('ajax:success', function() { $(this).closest('tr')="Something here from the object returned

我想在RubyonRails教程中实现ajax,控制器将在处理ajax请求时返回一个对象。我不知道如何处理javascript文件中的响应。 我想根据javascript文件中返回的对象更新一些div

以下是我在showcomments.js.erb中写的内容

$('.show_comment').bind('ajax:success', function() {
    $(this).closest('tr')="Something here from the object returned");
});
我调用ajax调用的链接是通过这行代码实现的

 <td><%= link_to 'Show Comment', :action => 'showcomment' , :id =>article, :remote => true ,:class=>'show_comment' %></td>

如何做到这一点?

将showcomment更改为:

def showcomment
   @article = Article.find(params[:article_id])
   @comment = @article.comments.find(params[:id])
    respond_to { |format| format.js }
end 
在showcomments.js.erb中,您可以访问对象
@article
@comment
。 使用示例如下所示:

$('#yourdiv').html('<%= @article.name %>');
$('#yourdiv').html('';

响应js格式时不渲染任何内容。因此,
showcoments.js.erb
中的代码不会被计算。删除控制器中的
{render:nothing=>true}
,并在
showcoments.js.erb
中执行您想要的任何操作。顺便说一句,您不需要
ajax:success
事件。请求已经结束了

showcomments.js.erb

$('.show_comment').closest('tr').html(“”);

我只是想尝试对其他答案进行一点扩展

在rails中,当您向链接添加
:remote=>true
时,它实际上负责jquery ajax调用的第一部分。这就是为什么不需要
bind(ajax:success,function(){#
在这里做事})

这是一个典型的jqueryajax调用

$.ajax({
  url: "test.html",
  type: "POST"
}).done(function() {
  $( this ).addClass( "done" );
});
Rails负责第一部分,直到
.done
回调。所以javascript erb模板中的任何内容都会像下面这样放入回调中

def showcomment
   @article = Article.find(params[:article_id])
   @comment = @article.comments.find(params[:id])
    respond_to do |format|
      format.js{ render :nothing => true }
    end
end
.done(function() {
  #your showcomments.js.erb file is inserted here
});
要从控制器呈现showcomments.js.erb模板,只需执行以下操作

def showcomment
  @article = Article.find(params[:article_id])
  @comment = @article.comments.find(params[:id])
  respond_to do |format|
    format.js
  end
end
format.js之后不需要任何内容,因为此时默认的rails操作是呈现一个与该操作同名的js模板,在本例中是
showcoment.js.erb


现在您知道,当单击该链接时,它将直接呈现
showcoment
模板,其中的任何javascript都将立即运行。Rails使ajax的使用变得非常简单。我希望这会有所帮助。

Doug,你能在另一个普通js文件中使用js.erb response+firing ajax:success吗?我正在尝试集成fullcalendar,并使用js.erb进行服务器端错误呈现,但会将fullcalendar代码保留在events.js中。
def showcomment
  @article = Article.find(params[:article_id])
  @comment = @article.comments.find(params[:id])
  respond_to do |format|
    format.js
  end
end