0

Rails newbe here。我有一個做AJAX查詢服務器鏈接:Rails 3中的Ajax成功事件

<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %> 

JS查看從部分負荷數據:

$('#content').html('<%= escape_javascript render("layouts/galleries/show") %>'); 

那與模型運行,並呈現控制器HTML和JS:

 
class GalleriesController < ApplicationController 
    def show 
    @galleries = Gallery.all 
    @gallery_to_show = Gallery.find(params[:id]) 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
end 

阿賈克斯工作正常,但我試圖把阿賈克斯完成後的回調:

 
jQuery(function() { 
    $(".link-to-gallery").bind("ajax:complete", function() { 
    alert(1) 
    }); 
}); 

和警報從不顯示。我究竟做錯了什麼? Rails的版本是3.2.11,紅寶石版本1.9.3p194

更新:當我使用此代碼

 
jQuery(function() { 
    $(".link-to-gallery") 
    .on("ajax:before", function() { 
     alert("before") 
    }) 
    .on("ajax:complete", function() { 
     alert("complete") 
    }); 
}); 

「之前」警示火災,但只有一次。如果我再次按下,我一無所獲。但阿賈克斯仍然有效。

+0

您是否嘗試使用'on',jQuery 1.7+中的首選機制? –

+0

您的回調代碼是否被js視圖中的呼叫覆蓋? 另外@戴夫牛頓提出了一個很好的觀點。你應該使用'on'來代替jquery的'bind'來處理事件。 – bullfrog

+0

試過這個。與「綁定」一樣。但我有一些新的信息。 – franza

回答

0

看來我很跛腳,但足夠聰明來解決這個問題。我有這些鏈接:

<%= link_to g.name, g, :class => 'link link-to-gallery', :remote => true %> 

在ajax後重新呈現的部分。所以附加到這些鏈接的回調函數在ajax之後被刷新掉了。所以我把鏈接從這個部分,現在它的作品。

0

我認爲這個問題是與你的控制器方法不與成功的狀態消息響應異步調用,200

試試這個

def show 
    @galleries = Gallery.all 
    @gallery_to_show = Gallery.find(params[:id]) 
    respond_to do |format| 
    format.html { :status => 200 } 
    format.js { :status => 200 } 
    end 
end 

如果還是不行,請嘗試以下。

def show 
    @galleries = Gallery.all 
    @gallery_to_show = Gallery.find(params[:id]) 
    respond_to do |format| 
    format.html { :status => :ok } 
    format.js { :status => :ok } 
    end 
end 
+0

你確定嗎?我從來不需要手動設置OK響應或狀態。 –

+0

我不是100%確定默認情況下Rails默認返回OK狀態。但是我知道一個事實:只有在返回OK或Fail狀態時才執行'ajax:complete'。所以不能傷害嘗試。 –

+0

不,不幫忙。 – franza