2009-01-08 19 views
49

Parece que esto debería ser algo incorporado a jQuery sin la necesidad de más que unas pocas líneas de código, pero no puedo encontrar la solución "simple". Por ejemplo, tengo un formulario HTML:Enviar formulario usando AJAX y jQuery

<form method="get" action="page.html"> 
    <input type="hidden" name="field1" value="value1" /> 
    <input type="hidden" name="field2" value="value2" /> 
    <select name="status"> 
     <option value=""></option> 
     <option value="good">Good</option> 
     <option value="bad">Bad</option> 
    </select> 
</form> 

Cuando alguien cambia el campo de selección, me gustaría enviar el formulario utilizando Ajax para actualizar la base de datos. Pensé que habría alguna manera de hacer lo siguiente sin crear manualmente los valores/atributos, sólo les envía todo, como:

$("select").change(function(){ 
    $.get("page.html?" + serializeForm()); 
}); 

¿Qué me falta?

+1

Re: la actualización, Es probable que no quiero que esto sea una petición GET ya que estás pasando los datos al servidor. Pero sí, esa es la idea general. De nada :) – rfunduk

+1

Aquí está la forma en que publico los datos de la forma de acción en el servidor http://tryconcepts.blogspot.in/2012/02/post-form-data-using-jquery-post-or.html – yashpal

Respuesta

10

Esto es lo que terminó funcionando.

$("select").change(function(){ 
    $.get("/page.html?" + $(this).parent("form").find(":input").serialize()); 
}); 
29

Hay un bonito form plugin que le permite enviar un formulario HTML de forma asincrónica.

$(document).ready(function() { 
    $('#myForm1').ajaxForm(); 
}); 

o

$("select").change(function(){ 
    $('#myForm1').ajaxSubmit(); 
}); 

para enviar el formulario de inmediato

+0

Gracias ! ¡Este plugin es increíble! – Rich

133

En primer lugar dar a su forma un atributo id, a continuación, utilizar un código como éste:

$(document).ready(function() { 
    var form = $('#my_awesome_form'); 

    form.find('select:first').change(function() { 
    $.ajax({ 
     type: "POST", 
     url: form.attr('action'), 
     data: form.serialize(), 
     success: function(response) { 
     console.log(response); 
     } 
    }); 
    }); 

}); 

lo que este código utiliza .serialize() para extraer los datos relevantes del formulario. También asume que la selección que le importa es la primera en el formulario.

Para referencia futura, los jQuery docs son muy, muy buenos.

+7

Un punto muy importante, que puede ser completamente obvio para muchos, pero definitivamente no lo era para mí, que se omite aquí y en todas las otras publicaciones de SO sobre este tema es que para tener éxito debes asegurarte de que el botón que estás usando para desencadenar el evento que provoca el envío del formulario a través de ajax NO ES tipo de envío! De lo contrario, esto siempre fallará. El enfoque serializado aquí es limpio. – codepuppy

+8

Dado que este código maneja la presentación del formulario al cambiar un cuadro de selección, no importa si tiene '' en el formulario. Si tiene un botón de enviar en el formulario, simplemente necesita manejar el evento 'submit' en el formulario y evitar la acción predeterminada. Una vez más, [docs] (http://api.jquery.com/submit/) viene al rescate en este :) – rfunduk

+0

Solución agradable .. Gracias – JEMI

Cuestiones relacionadas