2009-09-11 23 views
17

Aunque $ .ajax() se puede usar para hacer cosas ajax, no creo que sea adecuado para publicar valores de gran formato.¿Cómo publicar un formulario con muchos campos con jQuery?

¿Cómo harías post una forma grande (muchos campos) sin tener que ingresar todos a mano?

+3

Creo que el OP se refiere a publicar un formulario con muchos campos. Hay una gran cantidad de código repetitivo para escribir cuando se publican los campos uno por uno y creo que el OP pregunta si hay una forma de simplemente publicar todos los campos en el formulario. Esta pregunta fue muy útil para mí. –

Respuesta

42

¿Cuál es su razonamiento detrás de esa suposición? POST está diseñado para transferir grandes cantidades de datos que GET. Una solicitud AJAX POST es casi exactamente la misma que una solicitud POST "normal", simplemente se agrupa y maneja internamente por un navegador de una manera ligeramente diferente. Un par de encabezados pueden ser ligeramente diferentes, pero los datos son todos iguales. ¿Por qué AJAX no puede manejar una forma "grande"?

¿Qué definirías incluso como una forma "grande" de todos modos?

Edit: Gracias por la aclaración de su pregunta. Entiendo lo que estás preguntando ahora, y veo de dónde vienes. Para un formulario con muchas entradas, podría ser complicado agruparlo en una solicitud de Ajax todo el tiempo.

Dado que está utilizando jQuery, hay una solución fácil para esto. Consulte el método serialize(). Le da un formulario y le devuelve una cadena de consulta de todos los elementos y valores de entrada del formulario que puede pasar directamente a una solicitud ajax. Hay un ejemplo allí en la página del manual que muestra cómo se hace.

Todo lo que tiene que hacer es esto:

$.ajax({ 
    data: $("form").serialize(), 
    //etc. 
}); 

donde "form" es el id de su formulario.

+8

No estoy de acuerdo con que POST sea para transferir una mayor cantidad de datos que GET. POST es para alterar el estado del servidor con nueva información. GET es para recuperar un recurso del servidor. –

+0

¿Cómo se realiza serialize()? Me preocupo por su rendimiento. – omg

+2

@John: Sí, esa es la intención principal de cada uno. Sin embargo, no existe un límite práctico en el tamaño de una solicitud POST, mientras que las solicitudes GET tienen límites conocidos que causan problemas cuando se superan. Supongo que mi uso de la frase "específicamente para" es levemente incorrecto, ya que implica que ese es el * único * propósito de POST, que por supuesto no era la interpretación pretendida. – zombat

1

Si no ha probado todavía. A continuación, cree un formulario BIG (ahora lo que quiera decir con eso) y use $.ajax() o el complemento jQuery Forms para publicarlo. ¡Sabrá si es para este tipo de cosas o no!

EDITAR: - (después de su edición) ¡Entonces forms plugin es para usted! Dale un tiro.

+0

¿Sabe cómo decide publicar contenido? Automáticamente (¿algún mecanismo predeterminado como cuando enviamos el formulario) o verifica uno por uno? – omg

+0

@Shore dijo que tiene que ** establecer los datos manualmente, lo que es .. ** Esto enviará automáticamente todos los campos en el formulario. Puede serializar un subconjunto de campos para consultar la cadena. Consulte su documentación aquí: http: //malsup.com/jquery/form/ – TheVillageIdiot

6

Puede usar jQuery.post(url, data, callback, type), como es más simple para jQuery.ajax(options).

Al usar serialize, puede enviar el formulario completo automáticamente.

$.post("/post_handler/", 
    $("form#my_form").serialize(), 
    function(json){ 
     /*your success code*/ 
    }, "json"); 

Un ejemplo más completo:

<script> 
$().ready(function(){ 
    $("form#my_form submit").click(function(){ 
     $.post("/post_handler/", 
      $("form#my_form").serialize(), 
      function(json){ 
       /*your success code*/ 
      }, "json"); 
     return false; 
    }); 
} 
</script> 
<form id="my_form" action="/post_handler/" method="post"> 
    <input type="text" name="text1" value="my text 1" /> 
    <input type="text" name="text2" value="my text 2" /> 
    <input type="submit" name="submit_button" value="Send" /> 
</form> 

Esto sería reemplazar el valor predeterminado post, y llevar a cabo con AJAX.

+0

¿Qué pasa con serialize() en sí? ¿Cómo se hace de principio? – omg

+0

'$ (" form # my_form "). Serialize()' le proporciona el contenido de '

' listo para ser enviado a través del cable en formato querystring ('multiple = Multiple2 & check = check2 & radio = radio1') – voyager

+0

Usted habla de qué mientras le pregunto cómo. – omg

10

Probablemente desee utilizar serialize si no desea tratar manualmente con cada elemento.

$.ajax({ 
    type: "POST", 
    url: "form.php", 
    data: $("#form_id").serialize() 
    success: function(msg) { 
    alert("Form Submitted: " + msg); 
    } 
}); 
1

He enviado (grandes) formas más complejas con $ .ajax() y no tenía ningún problema. No he enviado archivos a través de solicitudes ajax, pero lo he visto hecho y funciona mejor que las publicaciones tradicionales porque no vincula el navegador mientras se está cargando.

Según su comentario a @zombat, supongo que tiene una gran cantidad de entradas, la mayoría de las cuales quedarán en blanco la mayor parte del tiempo. Dos sugerencias aquí 1) dividen las entradas en formularios separados y solo envían cada uno tan pronto como se toca/completa. 2) examine el estado de su formulario con JavaScript y envuelva la información en JSON o XML, y en lugar de publicar los datos del formulario, publique solo la estructura de datos.

"Grande" no debería ser un problema, quizás pueda encontrar un mejor adjetivo para describir sus datos que les permita a todos saber por qué es difícil de enviar.

Cuestiones relacionadas