jQuery: enviar formulario con AJAX
- Enviar formulario con AJAX en jQuery: enfoque directo
- Use el complemento de formulario jQuery para enviar el formulario con AJAX en jQuery
-
Enviar formulario con AJAX en jQuery: el enfoque
FormData
Este artículo le enseña tres métodos que enviarán un formulario usando AJAX-in-jQuery. El primero es el uso directo de AJAX-in-jQuery, mientras que el segundo emplea el Complemento de formulario AJAX
.
En el tercer método, usamos el objeto FormData
para capturar los datos del formulario antes de enviarlo usando AJAX.
Enviar formulario con AJAX en jQuery: enfoque directo
Llamamos a esto un “enfoque directo” porque no hay una biblioteca externa ni nada especial. Primero, configura su formulario HTML y se asegura de tener los atributos de nombre correctos.
Luego use jQuery para hacer lo siguiente.
- Use jQuery para escuchar el envío del formulario.
- Evite el comportamiento de envío predeterminado.
- Use el método
ajax()
en jQuery para iniciar una conexión AJAX. - Asegúrese de que la propiedad
tipo
enajax()
seaPOST
. - Asegúrese de que el valor de la propiedad
url
sea el valor del atributo HTMLacción
. - Asegúrese de que el valor de la propiedad
datos
sea un formato serializado de todas las entradas del formulario. - Procese los datos devueltos utilizando una función como valor de la propiedad
success
. - Procese cualquier error utilizando la función como valor de la propiedad
error
.
Encontrará la implementación del código de estos pasos en el siguiente código. Tenga en cuenta que el valor del atributo de formulario HTML es un script PHP que “procesa” el formulario.
Esta vez, solo mostramos los datos enviados en la consola. Pero puede enviar los datos del formulario a una base de datos; encontrará el script PHP al final de este artículo.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>01-jQuery AJAX Submit form</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh; }
form { border: 3px solid #1560bd; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$("#html_form").submit(function(event) {
// Prevent the default submit behavior
event.preventDefault();
// "this" refers to the current HTML form
let current_html_form = $(this);
let action_url = current_html_form.attr('action');
$.ajax({
type: "POST",
url: action_url,
data: current_html_form.serialize(), // Turn the form elements into a usable string
success: function (data) {
console.log(data);
},
error: function (data) {
alert("An error occurred during form submission");
},
});
});
</script>
</body>
</html>
Producción:
Use el complemento de formulario jQuery para enviar el formulario con AJAX en jQuery
Este método da como resultado el envío del formulario usando AJAX en jQuery pero de manera diferente. Usaremos el método ajaxForm
en el complemento jQuery Form esta vez.
Tiene el mismo enfoque para enviar el formulario usando AJAX con la siguiente excepción.
- Importe el complemento de formulario jQuery en su secuencia de comandos.
- Utilice el método
ajaxForm
del complemento. Detrás de escena, esto se encarga del envío del formulario. - El valor de la propiedad
url
es el nombre del script que procesará los datos enviados. - No escribes
$.ajax()
, sino$(form_selector).ajaxForm()
. Dondeform_selector
es la clase o el nombre de identificación de su formulario HTML.
Hemos implementado estos pasos en el siguiente código. Puedes comprobar la salida en la siguiente imagen.
Como recordatorio, encontrará el script PHP al final del artículo.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>02-jQuery-AJAX-with-AJAX-Form.html</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js" integrity="sha512-YUkaLm+KJ5lQXDBdqBqk7EVhJAdxRnVdT2vtCzwPHSweCzyMgYV/tgGF4/dCyqtCC2eCphz0lRQgatGVdfR0ww==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh; }
form { border: 3px dotted #0a9; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$(function(){
$('#html_form').ajaxForm({
type: "POST",
url:'process-jquery-form.php',
success: function (data) {
console.log(data);
},
error: function (data) {
alert("An error occurred during form submission");
},
})
});
</script>
</body>
</html>
Producción:
Enviar formulario con AJAX en jQuery: el enfoque FormData
Este método es el mismo que el enfoque directo porque no se trata de una biblioteca externa. Pero esta vez, tomamos los datos del formulario usando el objeto FormData
.
Los pasos restantes en el método ajax()
siguen siendo los mismos con las siguientes adiciones.
- Agregue la propiedad
processData
y establezca su valor enfalse
. - Agregue la propiedad
contentType
y establezca su valor enfalse
. - La función en la propiedad
error
debe tenerjQXHR
,textStatus
yerrorMessage
como argumentos. Luego muestra un mensaje de error usando el argumentoerrorMessage
.
El siguiente código le muestra cómo hacer esto. Encontrará el script PHP en la siguiente sección.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>03-jQuery-AJAX-with-FormData.html</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
body { display: grid; justify-content: center; align-items: center; height: 100vh;}
form { border: 3px dashed #1975c7; font-size: 1.2em; padding: 1.2em; }
</style>
</head>
<body>
<main>
<form id="html_form" action="process-jquery-form.php" method="POST">
<label for="first_name">First name</label>
<input id="first_name" type="text" name="first_name" required>
<label for="last_name">Last name</label>
<input id="last_name" type="text" name="last_name" required>
<input type="submit" name="submit" value="Submit form">
</form>
</main>
<script>
$("#html_form").submit(function(event) {
// Prevent the default submit behavior
event.preventDefault();
let current_html_form = $(this);
let action_url = current_html_form.attr('action');
// Grab the form data using the FormData Object
// Later, we'll use the data in the ajax request.
let form_data = new FormData(document.getElementById('html_form'));
$.ajax({
type: "POST",
url: action_url,
data: form_data,
processData: false,
contentType: false,
success: function (data) {
console.log(data);
},
error: function (jQXHR, textStatus, errorMessage) {
console.log(errorMessage);
},
});
});
</script>
</body>
</html>
Producción:
Script PHP para el formulario HTML
El siguiente es el script PHP utilizado para procesar los formularios HTML en este ejemplo. Puede guardarlo en su directorio de trabajo como process-jquery-form.php
.
<?php
// We detect an AJAX request from jQuery before
// processing the form data.
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
// Here, we show the first and last names.
// In your application, you can send them
// to your database.
echo "Hello " . htmlspecialchars($first_name) ." " . htmlspecialchars($last_name);
}
}
?>
Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedIn