繁体   English   中英

Ruby on Rails中的Ajax成功回调

[英]Ajax success callback in 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的链接是通过以下代码行

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

我处理该请求的控制器动作是这样的

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 });

这是典型的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非常简单。 希望对您有所帮助。

更改对此的评论:

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 %>");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM