Ajax成功回调ruby on rails

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

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

$('.show_comment').bind('ajax:success', function() { $(this).closest('tr')="Something here from the object returned"); }); 

调用ajax调用的链接是通过这行代码

   'showcomment' , :id =>article, :remote => true ,:class=>'show_comment' %> 

我处理此请求的控制器操作是这样的

 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 

如何才能做到这一点?

我只想尝试扩展其他答案。

在rails中,当你向链接添加:remote => true ,它基本上会处理jquery ajax调用的第一部分。 这就是你不需要bind.(ajax:success, function(){ # do stuff here });的原因bind.(ajax:success, function(){ # do stuff here });

这是典型的jquery ajax调用

 $.ajax({ url: "test.html", type: "POST" }).done(function() { $( this ).addClass( "done" ); }); 

Rails负责第一部分,直到.done回调。 所以你的javascript erb模板中的任何内容都会被放入回调中

 .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模板,在这种情况下它是showcomment.js.erb

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

将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 %>'); 

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

showcomments.js.erb

 $('.show_comment').closest('tr').html("<%= # you may render partial here or whatever %>");