Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/08/2009, 16:01
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
[TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

He visto preguntado muchas veces en el foro como obtener un juego de registros por AJAX, como por ejemplo los datos de un usuario y ponerlos en una pagina web sin refrescar la pagina.

En este tutorial vamos a ver un ejemplo básico de como hacerlo usando JQuery en el cliente, y en el server PHP con ZendFramework.

Para empezar creamos nuestra base de datos:
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuario` (
  2.   `usuario_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `nombre` VARCHAR(30) NOT NULL,
  4.   `telefono` VARCHAR(10) NOT NULL,
  5.   `color_favorito` VARCHAR(20) NOT NULL,
  6.   `pizza` tinyint(4) NOT NULL,
  7.   PRIMARY KEY  (`usuario_id`)
  8. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  9.  
  10. INSERT INTO `usuario` (`usuario_id`, `nombre`, `telefono`, `color_favorito`, `pizza`) VALUES
  11. (1, 'Fulanito', '123456', 'Verde', 1),
  12. (2, 'Sutanito', '654321', 'Azul', 0);

Después hay que crear un script en PHP que devuelva los datos en formato JSON, para este caso vamos a usar Zend Framework para abstraer el enlace a la base de datos, adentro del código pongo los comentarios necesarios.
Código PHP:
Ver original
  1. <?php
  2. // Establecemos el Path a las librerias de Zend Framework
  3. set_include_path(get_include_path(). PATH_SEPARATOR . 'C:\WebRoot\Zend\ZendFramework-1.9.0\library');
  4.  
  5. // Registramos el Autoloader para evitar cargar todas las clases manualmente
  6. require 'Zend/Loader/Autoloader.php';
  7. $autoloader = Zend_Loader_Autoloader::getInstance();
  8.  
  9. // Establecemos los datos de conexion
  10. $dbSettings = array(
  11.     'host'     => 'localhost',
  12.     'username' => 'root',
  13.     'password' => 'mypwd',
  14.     'dbname'   => 'test'
  15. );
  16.  
  17. // Creamos una instancia de Zend_Db_Adapter_*
  18. $db = Zend_Db::factory('Pdo_Mysql', $dbSettings);
  19.  
  20. // Preparamos un array para la respuesta
  21. $response = array();
  22.  
  23. // Obtenemos el ID de usuario desde POST
  24. $UsuarioID = (int) $_POST['usuario_id'];
  25.  
  26. // Comprobamos que hayan datos
  27. if ($UsuarioID <= 0) {
  28.     $response['error'] = 'El parámetro UsuarioID es incorrecto';
  29. }
  30.  
  31. // Generamos el Select y extraemos los datos
  32. $select = $db->select();
  33. $select->from('usuario', '*')->where('usuario_id=?', $UsuarioID);
  34. $db->setFetchMode(Zend_Db::FETCH_ASSOC);
  35. $userData = $db->fetchRow($select);
  36.  
  37. // Si fue encontrado agregamos los datos si no mostramos un error
  38. if ($userData === false) {
  39.     $response['error'] = 'El usuario no fue encontrado';
  40. } else {
  41.     $response['data'] = $userData;
  42.     $response['error'] = 'ok';
  43. }
  44.  
  45. // Enviamos la respuesta de regreso al script
  46. header('Content-type: text/plain');
  47. echo json_encode($response);

Posteriormente en nuestra pagina web preparamos todo para recibir los datos del servidor:
Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2.   <script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
  3.   <script type="text/javascript">
  4.   function getData() {
  5.     resetData(true);
  6.     var usuario_id = parseInt($('#usuario_id').val());
  7.     if (usuario_id > 0) {
  8.         $.post('get_data.php', {usuario_id: usuario_id}, function (response) {
  9.             if (response.error != 'ok') {
  10.                 alert(response.error);
  11.             } else {
  12.                 var record = response.data;
  13.                 $('#nombre').val(record.nombre);
  14.                 $('#telefono').val(record.telefono);
  15.                 $('#color_favorito').val(record.color_favorito);
  16.                 if (record.pizza == "1") {
  17.                     $('#pizza')[0].checked = true;
  18.                 }
  19.             }
  20.         }, 'json');
  21.     } else {
  22.         alert('#Por favor pon un numero mayor a 0');
  23.     }
  24.   }
  25.  
  26.   function resetData(keepUser) {
  27.     if(keepUser != true) {
  28.        $('#usuario_id').val('');
  29.     }
  30.     $('#nombre').val('');
  31.     $('#telefono').val('');
  32.     $('#color_favorito').val('');
  33.     $('#pizza')[0].checked = false;
  34.   }
  35.   </script>
  36.   <title>Ejemplo de JQuery con JSON/Zend Framework</title>
  37. </head>
  38. <form action="file.php" method="post">
  39.     <table>
  40.         <tr>
  41.             <td>ID de Usuario:</td>
  42.             <td>
  43.                 <input type="text" name="usuario_id" id="usuario_id" value="" />
  44.                 <input type="button" name="get_data" value="Obtener Datos" onclick="getData();"></td>
  45.         </tr>
  46.         <tr>
  47.             <td>Nombre:</td>
  48.             <td><input type="text" name="nombre" id="nombre" value="" /></td>
  49.         </tr>
  50.         <tr>
  51.             <td>Telefono:</td>
  52.             <td><input type="text" name="telefono" id="telefono" value="" /></td>
  53.         </tr>
  54.         <tr>
  55.             <td>Color favorito:</td>
  56.             <td>
  57.                 <select name="color_favorito" id="color_favorito">
  58.                     <option value="">- Select -</option>
  59.                     <option value="Verde">Verde</option>
  60.                     <option value="Rojo">Rojo</option>
  61.                     <option value="Azul">Azul</option>
  62.                 </select>
  63.             </td>
  64.         </tr>
  65.         <tr>
  66.             <td>Te gusta la Pizza?</td>
  67.             <td><input type="checkbox" value="1" name="pizza" id="pizza" /></td>
  68.         </tr>
  69.         <tr>
  70.             <td colspan="2">
  71.                 <input type="button" name="guardar" value="Guardar" onclick="" />
  72.                 <input type="button" name="borrar" value="Limpiar" onclick="resetData(false);" />
  73.             </td>
  74.         </tr>
  75.     </table>
  76. </form>
  77. </body>
  78. </html>

Aquí la parte interesante es el tratar los datos de regreso con JSON, esto se hace en el callback que pasamos a $.post, que es esta parte:
Código Javascript:
Ver original
  1. $.post('get_data.php', {usuario_id: usuario_id}, function (response) {
  2.             if (response.error != 'ok') {
  3.                 alert(response.error);
  4.             } else {
  5.                 var record = response.data;
  6.                 $('#nombre').val(record.nombre);
  7.                 $('#telefono').val(record.telefono);
  8.                 $('#color_favorito').val(record.color_favorito);
  9.                 if (record.pizza == "1") {
  10.                     $('#pizza')[0].checked = true;
  11.                 }
  12.             }
  13.         }, 'json');

Aquí le decimos a JQuery que vamos a hacer un POST al archivo get_data.php pasandole un parámetro, posteriormente en el callback leemos en var record = response.data; el registro que devolvimos desde el server y se lo asignamos a los campos del formulario.

Espero que con este mini tutorial puedan ver como funciona el traer datos codificados en JSON y poder manipularlos en Javascript.

Saludos