2010-09-16 28 views
17

Estoy actualizando de los carriles 2.3.8 a 3.0.0, así que tengo que reemplazar las llamadas de ayuda remote_form_for con form_for(@object, :remote=>true).Rails 3 llamadas de forma remota AJAX

He estado siguiendo junto con Simone Carletti pero no puedo obtener las devoluciones de llamada ajax desde rails.js para disparar.

Mi HTML generado es:

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

El javascript estoy probando con:

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

Los '' documento listo incendios de alerta, y la petición Ajax se ha ejecutado correctamente (datos se contabilizan al servidor), pero no se activa ninguna de las devoluciones de llamada 'ajax:____'.

¿Qué estoy haciendo mal?

(por lo que vale la pena, el propio formulario se carga a través de AJAX)

+2

Creo que el evento es 'ajax: error' en estos días. –

+0

Estoy usando rails 3.2.11 y aún las devoluciones de llamada no funcionan? alguna ayuda o idea? –

+0

@TaimoorChangaiz tal vez mi respuesta puede ayudarlo http://stackoverflow.com/a/16759013/946328 –

Respuesta

20

Wow, eso fue un desperdicio colosal de una noche.

Haciéndolo como lo hice, el prototipo predeterminado rails.js no enlazará las devoluciones de llamada.

Después de convertir a jQuery basado en rails.js (http://github.com/rails/jquery-ujs) las devoluciones de llamada funcionan bien.

+0

Sería útil si vinculó o proporcionó una muestra de cómo hacerlo. – jcollum

+0

@jcollum, elimine los rails.js basados ​​en prototipos de ' public/javascripts/'y reemplácelo con el basado en jQuery – SooDesuNe

2

Puede desencadenar las devoluciones de llamada basado en prototipos de este modo:

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

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

Sin embargo, no creo el objeto request en el ajax:complete devolución de llamada contiene la respuesta . Estoy acostumbrado a jQuery y esperaba que acceder a la respuesta fuera simple. En su lugar, parece que cambiar a jQuery-Rails puede ser aún más fácil, ya que no puedo encontrar el código de prototipo para reemplazar la funcionalidad :update de los ayudantes remotos de Rails 2.

0

Si la respuesta aceptada no soluciona el problema, compruebe si ha incrustado varias bibliotecas jQuery. En mi caso, tenía dos versiones diferentes de jQuery incrustadas y después de eliminar una de ellas, todo funcionó bien.

Cuestiones relacionadas