2010-09-16 53 views
17

我正在從rails 2.3.8升級到3.0.0,因此我需要用form_for(@object, :remote=>true)替換remote_form_for幫助器調用。Rails 3 AJAX遠程表格回調

我一直在跟着Simone Carletti,但我似乎不能從rails.js獲得ajax回調。

我生成的HTML是:

<form accept-charset="UTF-8" action="/vendor_shipments" class="new_vendor_shipment" data-remote="true" id="formname" method="post"> 

的JavaScript我與測試:

jQuery(function($){ 
    alert('document ready'); 
    $("#formname") 
     .bind('ajax:loading', function() {alert("loading!");}) 
     .bind('ajax:success', function(data, status, xhr) {alert("success!");}) 
     .bind('ajax:failure', function(xhr, status, error) {alert("failure!");}) 
     .bind('ajax:complete', function() {alert("complete!");}); 
}); 

'文檔準備' 警報火災,併成功執行Ajax請求(數據發佈到服務器),但'ajax:____'回調沒有一個觸發。

我在做什麼錯?

(對於它的價值,形式本身是通過AJAX加載)

+2

這些日子我認爲這個事件是'ajax:error'。 – 2012-01-10 01:53:19

+0

我使用rails 3.2.11,仍然回調不起作用?任何幫助或想法? – 2013-01-14 11:27:38

+0

@TaimoorChangaiz也許我的回答可以幫助你http://stackoverflow.com/a/16759013/946328 – 2013-05-26 12:01:00

回答

20

哇,這是一個晚上的巨大浪費。

這樣做,默認原型rails.js不會連接回調。

轉換爲基於jQuery的rails.jshttp://github.com/rails/jquery-ujs)回調工作正常。

+0

如果您鏈接或提供了一個樣例,那麼這將對您有所幫助 – jcollum 2012-12-21 03:07:16

+0

@jcollum,刪除基於原型的rails.js, public/javascripts /'並將其替換爲基於jQuery的版本 – SooDesuNe 2012-12-21 03:41:02

2

可以觸發基於原型的回調,像這樣:

$('formname').observe('ajax:before', function(){ 
    ... 
}); 

$('formname').observe('ajax:complete', function(request){ 
    ... 
}); 

不過,我不認爲request對象在ajax:complete回調包含響應。我習慣了jQuery,並希望訪問響應很簡單。相反,它看起來像切換到jQuery-Rails可能仍然更容易,因爲我似乎無法找到直接的原型代碼來替代Rails 2遠程助手中的:update功能。

0

如果接受的答案沒有解決您的問題,請檢查您是否嵌入了多個jQuery庫。在我的情況下,我有兩個不同版本的jQuery嵌入,並刪除其中之一,一切工作正常。