dominios y alojamiento web en hostalia

Enviar y procesar formulario con Ajax y PHP

02 de mayo de 2007
Valoración del artículo:
Utilizamos xajax para enviar por Ajax un formulario, así como enviar y procesarlo con PHP sin tener que actualizar o recargar la página donde estaba el formulario.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Estamos viendo algunos ejemplos de Ajax utilizado junto con PHP para crear aplicaciones web avanzadas, ayudándonos de la clase xajax, que facilita bastante la programación.

Ahora vamos a ver cómo procesar un formulario en una página web sin que se tenga que recargar la página, es decir, enviar al servidor los datos adjuntados por el usuario en el formulario, procesarlos con PHP y luego devolver una salida al usuario dependiendo de los datos introducidos. Todo sin cambiar la página en la que estaba el usuario.

Vimos en un artículo pasado como realizar la página más básica para usar Ajax con PHP de una manera sencilla utilizando xajax. Por ello vamos a dar por entendidos esos puntos. En este caso vamos a explicar las particularidades del envío de formularios con Ajax.

Aprendimos en el artículo pasado a llamar a funciones PHP desde Javascript. Ahora lo que tenemos que hacer es llamar a una función PHP para que procese un formulario. La llamada la seguiremos haciendo mediante Javascript cuando el usuario pulse el botón de enviar. La particularidad de este caso de envío y procesamiento de formularios con Ajax es la manera de enviar y recoger los datos del formulario.

Enviar los datos del formulario a PHP con xajax

Podemos ver aquí el código del formulario:

<div id="mensaje">
<form id="formulario">
Nombre: <input type="text" name="nombre">
<br>
Apellidos: <input type="text" name="apellidos">
<br>
<input type="button" value="Enviar" onclick="xajax_procesar_formulario(xajax.getFormValues('formulario'))">
</form>
</div>

Como vemos, tenemos un par de campos de texto y un botón, que se encargará lanzar el proceso para enviar y procesar los datos. Para ello, el botón tiene un comando para el evento onclick, que trataremos de explicar.

Ahora con xajax vamos a disponer de un método Javascript llamado xajax.getFormValues(ID_FORMULARIO), que recibe el identificador del formulario que se desean obtener los datos. Esta función nos sirve generar los datos del formulario que debemos enviar para su procesamiento. En nuestro caso el formulario tiene el id="formulario", así que lo invocamos:

xajax.getFormValues('formulario')

Los datos del formulario los tenemos que pasar a la función que se encarga de procesarlos, que es una función que hemos escrito con PHP y luego hemos registrado en el objeto xajax. Veremos esa función a continuación.

Recibir los datos del formulario enviado con xajax

Desde PHP estaríamos acostumbrados a recoger los datos de un formulario con $_POST o $_GET, pero ahora lo vamos a tener que hacer de una manera distinta.

Como hemos visto antes, a la función que procesa los el formulario se le envía un parámetro con los datos. Pues ese mismo parámetro es el que tenemos que utilizar para recibir los datos del formulario. Los datos del formulario nos llegan como un array asociativo, por tanto, cuando programemos la función en PHP, el método de trabajo será similar al que utilizaríamos con $_POST y $_GET, que también son arrays asociativos.

function procesar_formulario($form_entrada){
   $salida = "Gracias por enviarnos tus datos. Hemos procesado esto:<p>";
   $salida .= "Nombre: " . $form_entrada["nombre"];
   $salida .= "<br>Apellidos: " . $form_entrada["apellidos"];
   
   //instanciamos el objeto para generar la respuesta con ajax
   $respuesta = new xajaxResponse();
   //escribimos en la capa con id="respuesta" el texto que aparece en $salida
   $respuesta->addAssign("mensaje","innerHTML",$salida);
   
   //tenemos que devolver la instanciación del objeto xajaxResponse
   return $respuesta;
}

La función que procesa el formulario se llama procesar_formulario() y recibe un parámetro que es el array asociativo con los datos del formulario. Esa función compone una salida y luego la devuelve con Ajax.

Para ello crea un objeto de la clase xajaxResponse y con el método addAssign("mensaje","innerHTML",$salida) consigue que en la capa con id="mensaje" se muestre la salida del procesamiento del formulario.

No hay que olvidarse de registrar la función en el objeto xajax

//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesar_formulario");

Pero todas estas generalidades y códigos adicionales necesarios para utilizar xajax los hemos visto en el artículo anterior: Xajax: Ajax para PHP.

El código completo de este ejemplo es el siguiente:

Actualizado: Este código está con Xajax 0.2.5. Pero si quieres saber cómo pasarlo a la versión más moderna, tienes que entrar en: Actualiza tu framework a Xajax 0.5.

<?
//incluímos la clase ajax
require ('xajax/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function procesar_formulario($form_entrada){
   $salida = "Gracias por enviarnos tus datos. Hemos procesado esto:<p>";
   $salida .= "Nombre: " . $form_entrada["nombre"];
   $salida .= "<br>Apellidos: " . $form_entrada["apellidos"];
   
   //instanciamos el objeto para generar la respuesta con ajax
   $respuesta = new xajaxResponse();
   //escribimos en la capa con id="respuesta" el texto que aparece en $salida
   $respuesta->addAssign("mensaje","innerHTML",$salida);
   
   //tenemos que devolver la instanciación del objeto xajaxResponse
   return $respuesta;
}
//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesar_formulario");

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>
<html>
<head>
   <title>Enviar y procesar un formulario con Ajax y PHP</title>
   <?
   //En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
   $xajax->printJavascript("xajax/");
   ?>
</head>

<body>
<h1>Recibir y procesar formulario con Ajax y PHP</h1>
<div id="mensaje">
<form id="formulario">
Nombre: <input type="text" name="nombre">
<br>
Apellidos: <input type="text" name="apellidos">
<br>
<input type="button" value="Enviar" onclick="xajax_procesar_formulario(xajax.getFormValues('formulario'))">
</form>
</div>

</body>
</html>

Podemos verlo en funcionamiento en una página aparte.

Si necesitásemos insertar estos datos en una base de datos no variaría mucho el ejemplo. No obstante, lo hemos contado en el artículo: Recibir formulario con Ajax e insertar información en base de datos.

Compartir en redes sociales

Comentarios
Fueron enviados 21 comentarios al artículo
13 comentarios no revisados
8 comentarios revisados:
Por: Adrian
08/5/2007
El articulo es muy bueno. Creo que en general hacen un trabajo formidable y de mucha ayuda para la comunidad de programadores WEB. La estructura y la busqueda de los articulos es exquisita asi como el detalle y la forma de exponerlos.

Saludos a todos y sigan con este paso
Por: Ronald
16/5/2007
Muy interesante el articulo creo que nos facilita muchas cosas, ahora bien el problema jaja, como seria para enviar los datos a una base de datos mysql?

RESPUESTA

Pues en la función procesar_formulario() tendrías que componer la sentencia SQL para hacer el insert y luego ejecutar el insert.

Hemos agregado unas líneas al artículo para mostrar este caso.

Por: cesar gonzalez
12/9/2007
Me acabo de percatar que el problema es que no especificaron la version del xajax con la que está hecha el ejemplo, el siguiente codigo funka en la version xajax_0.5_beta_4b_Full, es casi igual al de ustedes... lo probe con explorer 7 y la ultima version del mozilla y funciona de maravillas. Ya que descubri el problema voy a seguir leyendo su manual, saludos !!!

<?php
//incluímos la clase ajax
require ('xajax/xajax_core/xajax.inc.php');

//instanciamos el objeto de la clase xajax
$xajax = new xajax();

function procesar_formulario($form_entrada){
$salida = "Gracias por enviarnos tus datos. Hemos procesado esto:<p>";
$salida .= "Nombre: " . $form_entrada["nombre"];
$salida .= "<br>Apellidos: " . $form_entrada["apellidos"];

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("mensaje","innerHTML",$salida);

//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}
//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesar_formulario");

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>
<html>
<head>
<title>Enviar y procesar un formulario con Ajax y PHP</title>
<?
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<h1>Recibir y procesar formulario con Ajax y PHP</h1>
<div id="mensaje">
<form id="formulario">
Nombre: <input type="text" name="nombre">
<br>
Apellidos: <input type="text" name="apellidos">
<br>
<input type="button" value="Enviar" onclick="xajax_procesar_formulario(xajax.getFormValues('formulario'))">
</form>
</div>

</body>
</html>


jhonatt...
enviar y recibir datos
11/9/2009
HOla a todos, quiero que por favor me ayuden, soy renuevo en lo de php y bases de datos, así que quiero recibir una orientación para saber más o menos por dónde buscar.
Necesito que haya un formulario con 2 opciones nombre y numero de identifiación, así cuando el usuario llene los campos se devuelva una información específica para él que está almacenada previamente.Gracias

chelocu...
xajax incluyendo una clase php
01/9/2010
Hola, estoy probando xajax e intente hacer una validación de login de usuario, el codigo de la validacion lo tengo como un metodo en la clase usuario dentro de un archivo php en el que estan definidas todas las clases con los datos de la aplicación.
Hice el formulario con xajax siguiendo el tutorial y funciona bien, pero al incluir tanto con include como con require_once el archivo de las clases deja de funcionar.
Ese archivo lo estoy utilizando en una aplicación sin xajax y funciona todo ok.
Probe tambien incluirlo en alguno de los ejemplos que vienen con el xajax y pasa lo mismo.
Alguien podría darme una pista al respecto?
Desde ya gracias.

Marcelo

chelocu...
xajax incluyendo una clase php
01/9/2010
agrego, saco el include del archivo con las clases y declaro la clase dentro del archivo que contiene la funcion xajax y todo funciona ok. no se cual es el problema, si alguno sabe agradezco.
Marcelo

taek777
problema
08/3/2011
Que tal buenas saben? estoy haciendo un sistemas en el cual utilizo JQuery y Xajax... y actualizo un parte de la pagina con Jquery lo q se inserta en un fomulario que despues quiero tratar con xajax pero cuando trato de captar algo del array asociativo pues no sale imprimiendo el tamaño del array dice 0 alguien podra ayudarme por favor

.. de ante mano Gracias

JOOZ
ayudaaaaaaaaa xajax!!!!!!!!!!!
23/12/2011
soy un poco nuevo y estoy aprendiendo pero este codigo no m funciona y no se cual sea el problema.... no me muestra ningun error pero el boton no hace nada...... si me pudieran orientar se los agradeceria.....

<?php
require ('../xajax/xajax_core/xajax.inc.php');
$xajax = new xajax();

function procesa_form($form_entrada){
$salida = "Gracias por enviarnos tus datos. Hemos procesado esto:<p>";
$salida .= "Nombre: " . $form_entrada["nombre"];
$salida .= "<br>Apellidos: " . $form_entrada["apellidos"];

//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->assign("mensaje","innerHTML",$salida);

return $respuesta;
}
//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesa_form");

//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>
<html>
<head>
<title>Enviar y procesar un formulario con Ajax y PHP</title>
<?php
$xajax->printJavascript("/xajax");

?>
</head>

<body>
<h1>Recibir y procesar formulario con Ajax y PHP</h1>
<div id="mensaje">
<form id="formulario">
Nombre: <input type="text" name="nombre">
<br>
Apellidos: <input type="text" name="apellidos">
<br>
<input type="button" value="Enviar" onclick="xajax_procesa_form(xajax.getFormValues('formulario'))">
</form>
</div>

</body>
</html>

Manuales relacionados
Categorias relacionadas
El autor
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...