2011-01-06 11 views
7

Estoy desarrollando una aplicación Rails que tiene formularios generados utilizando formtastic. Estoy desarrollando pruebas & localmente, es decir, en localhost: 3000 w/Ruby-1.9.2, Rails-3.0.1, jQuery y AJAX.Rails 3: Formulario enviado dos veces

A continuación se muestra un resultado de pantalla de muestra del problema que estoy viendo. Mis formularios se envían dos veces en 1 segundo el uno del otro. No puedo entender por qué está sucediendo esto. Veo este problema con todas las solicitudes, incluido GET.

  1. Comienza la POST "/ empresas/6/edit_balance" 127.0.0.1 para el 2011-01-07 02:31:47 0530 Procesamiento por BusinessesController # edit_balance como parámetros JS: {" UTF-8 "=>" ✓", "authenticity_token"=> "zcWH08sV8kPbAYy7JQX64Cu2e1i/kEB1AB4x5a08CO8 ="

  2. Comienza la POST "/ empresas/6/edit_balance" 127.0.0.1 para el 2011-01-07 02:31 : 48 +0530 Procesamiento por BusinessesController # edit_balance como JS Parámetros: { "UTF-8" => "✓", "authenticity_token" => "zcWH08sV8kPbAYy7JQX64Cu2e1i/kEB1AB4x5a08CO8 ="

Y así me pregunto si estoy haciendo un error básico de programación. En caso afirmativo, ¿podría sugerir algunas soluciones que pueda probar?

+1

indique el archivo de vista – apneadiving

+0

¿podría resolver esto? Actualmente tengo el mismo problema – pduersteler

Respuesta

1

Si envía el formulario con Javascript, intente configurarlo para que se desactive cuando se envíe el formulario. Con jQuery sería algo como esto (no probado):

$('form').submit(function(){ 
    $(this).find(input[type='submit']).attr("disabled", "true"); 
    ... // submit form via AJAX 
    return false; 
}); 
+0

formulario.attr ("acción", ...) establece solo el atributo "acción" para el formulario y, por lo tanto, determina a qué parte se enviará el formulario, pero en realidad no envía el formulario. – polarblau

0

Gracias PolarBlau .. Vamos a tratar su sugerencia ..

Apnediving: A continuación se presentan los bits de código que 1. Crear el formulario (forma parcial) 2. defina el diálogo que alberga el formulario (diálogo parcial) y 3. el JS que vincula una acción al formulario.

Forma parcial (credits_form)

- f.inputs :name => 'Edit Credits' do 
    = f.input :numeric_input_1, :label => 'Amount', :as => :select, :collection => [1000,2000,3000] 
    = f.input :boolean_input_1, :label => 'Add Credits' 
    = f.commit_button :label => 'Submit' 

diálogo parciales

# edit-créditos-dialog

- @user_input = UserInput.new

= semantic_form_for @user_input, :remote => true do |f|  
= render :partial => 'businesses/credit_form', :locals => {:f => f} 

Código JS

$.getJSON('/businesses/' + id + '/load_credits', function(data) { 
    var form = $('#edit-credits-dialog form') ; 

    form.attr('action', '/businesses/' + id + '/edit_balance') ; <-- seems to be happening twice 
    $('#edit-credits-dialog').dialog('open') ; <--- happens once 
}) ; 
+0

Desactivar el botón de enviar no parece funcionar. Todavía veo 2 solicitudes POST por cada clic. – Abhinav

+0

Desactivar el botón de enviar no parece funcionar. Todavía veo 2 solicitudes POST por cada clic. ¿Es posible que la segunda solicitud ocurra porque el navegador no recibió reconocimiento por la primera? También me di cuenta de que eliminé el bloque responder_ de mi controlador y lo reemplacé con solo un render: json. ¿Podría ser que respon_to es importante y evita el procesamiento duplicado? Si no es ninguna de las 2 posibilidades anteriores, entonces estoy jodido porque no tengo una tercera idea. – Abhinav

+2

OK, lo descubrí ... Hay un problema con mis archivos javascript. Estaba vinculando el mismo evento de "clic" dos veces en el mismo objeto. Y aparentemente, comenzando con jQuery-1.4.2, es posible hacer eso. Actualmente estoy eludiendo el problema haciendo $ (obj) .unbind ('click', handler) .bind ('click', handler). Pero tengo toda una noche de código de reorganización delante de mí. Gracias a todos por sus entradas – Abhinav

8

Tuve este mismo problema justo después de implementarlo en Heroku ... precompilé mis activos y, de repente, recibí dos envíos de AJAX. Supongo que de alguna manera terminé con archivos Javascript duplicados en public/assets.

Para solucionar el problema, simplemente eliminé todo mi directorio público/de recursos.

+1

Amir, gracias. Ata Ga'on! Intenté precompilar y luego limpiar los activos y no funcionó. ¡Pero simplemente borrar el directorio public/assets funcionó! ¡Gracias! (Solo hizo 'rm -r public/assets /') – mjnissim

Cuestiones relacionadas