Foros del Web » Programando para Internet » Jquery »

[TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

Estas en el tema de [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework) en el foro de Jquery en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/08/2009, 16:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 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
  #2 (permalink)  
Antiguo 16/08/2009, 22:48
Avatar de a83
a83
 
Fecha de Ingreso: noviembre-2005
Ubicación: Santiago de chile
Mensajes: 637
Antigüedad: 19 años
Puntos: 1

donde esta esto? esta interesante el codigo gator v

donde esta esto
Código PHP:
require 'Zend/Loader/Autoloader.php'
es una clase o estoy mal ? que funcion cumple

Última edición por GatorV; 17/08/2009 a las 09:52
  #3 (permalink)  
Antiguo 17/08/2009, 09:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

Es parte de la librería de Zend Framework, por eso el tutorial indica que es para trabajarse con Zend Framework.

Saludos.
  #4 (permalink)  
Antiguo 18/08/2009, 15:33
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 10 meses
Puntos: 9
Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

hola gatorv, esta muy interesante, pero cual es la ventaja de esto contra una consulta simple con ajax y php
__________________
Quitenme la vida pero no la bebida.
  #5 (permalink)  
Antiguo 18/08/2009, 20:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

Simplemente es una forma de hacerlo con Zend y JQuery
  #6 (permalink)  
Antiguo 19/05/2011, 02:00
 
Fecha de Ingreso: junio-2007
Mensajes: 2
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

Muchas gracias GatorV, muy práctico que es de lo que se trata. Yo que vengo del mundo Java y estoy intentando meterme en el mundillo (PHP, Zend, ZendX (jquery, he renunciado de momento a DOJO)...) lo he visto muy útil.

Una preguntilla sobre best practices, que suelto al aire:
En la vista en teoría debería haber el mínimo de Lógica de negocio, pero ¿es mejor devolver un JSON o un objeto model (zend) en la respuesta para la vista?

No se si se sale del tema del hilo, si es así perdón por el error. Estoy aprendiendo y no quiero coger malos vicios J

Muchas gracias otra vez
Saludos
  #7 (permalink)  
Antiguo 05/07/2011, 08:06
 
Fecha de Ingreso: enero-2008
Ubicación: D.F
Mensajes: 7
Antigüedad: 16 años, 9 meses
Puntos: 0
Pregunta Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

El tutorial excelente tutorial, muchas gracias GatorV.

Solo una pregunta, si quisiera recuperar recuperar los datos JSON mediante Zend a partir del ejemplo ¿como obtengo el parámetro para decodificar los datos?

Código PHP:
Ver original
  1. $data = Zend_Json::decode($param);
  2.  
  3. $nombre = $data->nombre;
  4. $tel =  $data->telefono;
  #8 (permalink)  
Antiguo 06/07/2011, 10:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: [TUTORIAL] Obtener varios valores con AJAX (Jquery + ZendFramework)

Mediante el ejemplo los datos se enviarán así directamente por un POST regular, si quieres volver a enviarlos mediante AJAX tendrías que implementar esa parte y sí, usar Zend_Json para decodificar los datos.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:02.