Tengo un formulario con nombre orderproductForm
y un número indefinido de entradas.
Quiero hacer algún tipo de jQuery.get o ajax o algo así que llame a una página a través de Ajax y envíe todas las entradas del formulario orderproductForm
.
Supongo que una forma sería hacer algo como
jQuery.get("myurl",
{action : document.orderproductForm.action.value,
cartproductid : document.orderproductForm.cartproductid.value,
productid : document.orderproductForm.productid.value,
...
Sin embargo, no sé exactamente todas las entradas de formulario. ¿Hay una característica, función o algo que simplemente envíe TODAS las entradas del formulario?
.ajaxSubmit()
/.ajaxForm()
no son funciones básicas de jQuery: necesita el complemento de formulario jQueryEsta es una referencia simple:
Espero que te ayude.
fuente
type: $(this).attr('method')
si usa elmethod
atributo en su formulario.Otra solución similar que utiliza atributos definidos en el elemento de formulario:
fuente
get
y la URL actual, respectivamente. Podría hacer con agregar esta suposición al código.Hay algunas cosas que debes tener en cuenta.
1. Hay varias formas de enviar un formulario
Por lo tanto, debemos vincularnos al evento de envío del formulario , no al evento de clic del botón. Esto garantizará que nuestro código funcione en todos los dispositivos y tecnologías de asistencia ahora y en el futuro.
2. Hijax
Es posible que el usuario no tenga habilitado JavaScript. Un patrón de hijax es bueno aquí, donde tomamos suavemente el control del formulario usando JavaScript, pero lo dejamos enviable si JavaScript falla.
Deberíamos extraer la URL y el método del formulario, por lo que si el HTML cambia, no necesitamos actualizar el JavaScript.
3. JavaScript discreto
Usar event.preventDefault () en lugar de return false es una buena práctica, ya que permite que el evento burbujee. Esto permite que otros scripts se vinculen con el evento, por ejemplo, scripts de análisis que pueden estar monitoreando las interacciones del usuario.
Velocidad
Idealmente deberíamos usar un script externo, en lugar de insertar nuestro script en línea. Podemos vincularnos a esto en la sección de encabezado de la página usando una etiqueta de script, o vincularlo en la parte inferior de la página para mayor velocidad. El script debería mejorar silenciosamente la experiencia del usuario, no interferir.
Código
Suponiendo que está de acuerdo con todo lo anterior, y desea capturar el evento de envío y manejarlo a través de AJAX (un patrón hijax), podría hacer algo como esto:
Puede activar manualmente el envío de un formulario cuando lo desee a través de JavaScript utilizando algo como:
Editar:
Recientemente tuve que hacer esto y terminé escribiendo un complemento.
Agregue un atributo data-autosubmit a su etiqueta de formulario y luego puede hacer esto:
HTML
JS
fuente
También puede usar FormData (pero no disponible en IE):
Así es como usas FormData .
fuente
Versión simple (no envía imágenes)
Copiar y pegar una modificación de un formulario o todos los formularios en una página
Es una versión modificada de la respuesta de Alfrekjv.
JavaScript
Quería editar la respuesta de Alfrekjv, pero me desviaba demasiado de ella, así que decidí publicar esto como una respuesta separada.
No envía archivos, no admite botones, por ejemplo, al hacer clic en un botón (incluido un botón de envío) se envía su valor como datos de formulario, pero como se trata de una solicitud ajax, no se enviará el clic del botón.
Para admitir botones, puede capturar el clic real del botón en lugar del envío.
En el lado del servidor, puede detectar una solicitud ajax con este encabezado que jquery establece
HTTP_X_REQUESTED_WITH
para phpPHP
fuente
Este código funciona incluso con entrada de archivo
fuente
Array.from(new FormData(form))
itera sobre este iterador de formdata :)Realmente me gustó esta respuesta de superluminary y especialmente la forma en que envolvió la solución en un complemento jQuery . Así que gracias a superluminary por una respuesta muy útil. Sin embargo, en mi caso, quería un complemento que me permitiera definir el éxito y el error controladores de eventos de por medio de opciones cuando se inicializa el complemento.
Así que aquí está lo que se me ocurrió:
Este complemento me permite "ajaxificar" formularios html en la página y proporcionar controladores de eventos de envío , éxito y error para implementar comentarios al usuario sobre el estado del envío del formulario. Esto permitió que el complemento se usara de la siguiente manera:
Tenga en cuenta que el éxito y el error controladores de eventos de reciben los mismos argumentos que recibiría de los eventos correspondientes del método jQuery ajax .
fuente
Tengo lo siguiente para mí:
dónde
Esto supone que la publicación en 'url' devuelve un ajax en forma de
{success: false, error:'my Error to display'}
Puedes variar esto como quieras. Siéntase libre de usar ese fragmento.
fuente
target
para aquí? ¿Por qué enviaría un formulario con AJAX, solo para redirigirlo a una nueva página?El formulario de envío de jQuery AJAX no es más que enviar un formulario utilizando el ID del formulario cuando hace clic en un botón
Por favor siga los pasos
Paso 1: la etiqueta del formulario debe tener un campo ID
Botón en el que vas a hacer clic
Paso 2: el evento de envío está en jQuery, lo que ayuda a enviar un formulario. en el siguiente código estamos preparando la solicitud JSON del nombre del elemento HTML .
para la demostración en vivo, haga clic en el siguiente enlace
¿Cómo enviar un formulario usando jQuery AJAX?
fuente
Considere usar
closest
fuente
Sé que esta es una
jQuery
pregunta relacionada, pero ahora los días con JS ES6 las cosas son mucho más fáciles. Como no hay unajavascript
respuesta pura , pensé que podría agregar unajavascript
solución pura simple a esto, que en mi opinión es mucho más limpia, utilizando lafetch()
API. Esta es una forma moderna de implementar solicitudes de red. En su caso, dado que ya tiene un elemento de formulario, simplemente podemos usarlo para crear nuestra solicitud.fuente
Para evitar múltiples envíos de datos:
No olvide desvincular el evento de envío, antes de que el formulario se envíe nuevamente, el usuario puede llamar a la función sumbit más de una vez, tal vez olvidó algo o fue un error de validación.
fuente
Si está utilizando el formulario .serialize (), debe darle a cada elemento del formulario un nombre como este:
Y el formulario se serializa así:
fuente
Puede usar esto en la función de envío como a continuación.
Formulario HTML
Función jQuery:
Para obtener más detalles y una visita de muestra: http://www.spiderscode.com/simple-ajax-contact-form/
fuente
Esta no es la respuesta a la pregunta de OP,
pero en caso de que no pueda usar DOM de forma estática, también puede intentarlo de esta manera.
fuente
Tratar
Mostrar fragmento de código
fuente
Solo un recordatorio amistoso que también
data
puede ser un objeto:fuente
JavaScript
HTML
fuente
También está el evento submit, que se puede activar de esta manera $ ("# form_id"). Submit (). Usaría este método si el formulario ya está bien representado en HTML. Acabas de leer en la página, rellenar las entradas del formulario con cosas y luego llamar a .submit (). Utilizará el método y la acción definidos en la declaración del formulario, por lo que no necesita copiarlo en su JavaScript.
ejemplos
fuente