簡體   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