2011-06-20 102 views
6

我试图为远程链接触发ajax:success回调。我在Rails 3.0.8和jQuery-rails 1.0.11上。我运行jquery生成器来安装javascripts。 jquery和jquery_ujs都包含在我的默认值中,我可以验证它们是否包含在页面中。Rails jQuery UJS回调没有触发

这里是我的javascript:

jQuery(function($) { 
    $("#deactivate") 
    .bind("ajax:success", function() { 
     alert("HELLO"); 
    }) 
    .bind("ajax:error", function() { 
     alert("GOODBYE"); 
    } 
); 
}); 

链接:

= link_to 'Deactivate', activate_patient_path(patient), :id => 'deactivate', :class => "button button-red", :remote => true 

Activate动作:

def activate 
    patient = Patient.find(params[:id]) 
    patient.do_not_call = !patient.do_not_call 
    if patient.save 
     render :nothing => true 
    else 
     render :status => 500, :nothing => true 
    end 
end 

AJAX调用似乎是工作的罚款。该操作被触发,我可以看到数据库中的更改。但是,ajax回调没有被触发。我无法让他们工作。我可以让其他事件(如点击)完美工作。

如果我在Firebug调试rails_ujs我看到下面的代码从Rails的AJAX块跑:

success: function(data, status, xhr) { 
    element.trigger('ajax:success', [data, status, xhr]); 
} 

我难倒。有任何想法吗?

+1

如果我执行 element = $(“#activate”); element.trigger('ajax:success'); 在控制台我可以得到回调触发。出于某种原因,它只是不适用于UJS。 – anthonator

+0

使用Firebug,如果我在rails_ujs中的element.trigger('ajax:success',[data,status,xhr])行放置断点,然后将$(“#deactivate”)绑定到ajax:停止回调时成功会触发。当我点击链接直到刷新页面时,回调将继续正确触发。看起来$(“#deactivate”)与触发器正在执行的元素不是相同的引用。 – anthonator

回答

12

请确保您没有在rails.js之后再次包括jquery.js ...我遇到了一个类似的问题,其中jquery.js被包含两次,并且包含rails.js。

+1

就是这样。 jQuery Tools嵌入了jQuery的旧版本。 – anthonator