2010-09-16 11 views
17

Ich bin von Schienen 2.3.8 auf 3.0.0 aktualisieren, so muss ich die remote_form_for Helper Anrufe mit form_for(@object, :remote=>true) ersetzen.Rails 3 AJAX Remote Form Callbacks

Ich habe zusammen mit Simone Carletti gefolgt, aber ich kann nicht scheinen, um die Ajax-Callbacks von rails.js zu feuern.

Meine erzeugte HTML ist:

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

Die Javascript ich mit dem Testen bin:

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

das 'Dokument bereit' Alarm ausgelöst und die Ajax-Anforderung erfolgreich ausgeführt (Daten gebucht zum Server), aber keine der Callbacks 'ajax:____' wird ausgelöst.

Was mache ich falsch?

(für das, was es wert ist, das Formular selbst ist über Ajax geladen)

+2

Ich denke, dass das Ereignis "Ajax: Fehler" in diesen Tagen ist. –

+0

Ich benutze Schienen 3.2.11 und noch Callbacks funktionieren nicht? jede Hilfe oder Idee? –

+0

@TaimoorChangaiz vielleicht kann meine Antwort Ihnen helfen http://Stackoverflow.com/a/16759013/946328 –

Antwort

20

Wow, das war eine kolossale Verschwendung von einem Abend.

So wie ich es getan habe, wird der Standardprototyp rails.js die Callbacks nicht verbinden.

Nach der Konvertierung in die jQuery basierte rails.js (http://github.com/rails/jquery-ujs) Callbacks funktionieren gut.

+0

Wäre hilfreich, wenn Sie eine Beispielprozedur verlinkt oder bereitgestellt hätten: – jcollum

+0

@jcollum, löschen Sie prototypbasierte rails.js von ' public/javascripts/'und ersetze es durch das jQuery-basierte – SooDesuNe

2

Sie können den Prototyp-basierten Rückrufe auslösen wie so:

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

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

Aber ich glaube nicht, das request Objekt im ajax:complete Rückruf enthält die Antwort. Ich bin an jQuery gewöhnt und hatte gehofft, dass der Zugriff auf die Antwort einfach wäre. Stattdessen scheint es, als wäre der Wechsel zu jQuery-Rails immer noch einfacher, da ich keinen Drop-in-Prototypcode finden kann, der die :update-Funktionalität von Rails 2-Remote-Helfern ersetzt.

0

Wenn die akzeptierte Antwort Ihr Problem nicht behebt, überprüfen Sie, ob Sie mehrere jQuery-Bibliotheken eingebettet haben. In meinem Fall hatte ich zwei verschiedene Versionen von jQuery eingebettet und nach dem Entfernen einer von ihnen, alles hat gut funktioniert.

Verwandte Themen