17
Feb
06

Jugando con AJAX

Gracias a un excelente artículo de Alex Sancho me he atrevido a desarrollar una primera aplicación basada en AJAX y he aprovechado ya para hacerlo sobre un proyecto real, Artesonico.com

La aplicación en cuestión ha sido pasar un formulario html-php-mysql a AJAX para hacer la llamada directamente a un php que se encargará de guardar los datos y enviar un email al usuario.

Dicho esto, vamos al grano…

En primer lugar hemos descargado las librerías necesarias para poder ejecutar Ajax, moo.ajax y prototype.lite. Una vez descargadas la incluimos en un directorio donde guardaremos todas las librerías javascript que utilicemos, en este caso el directorio “js”.

Lo siguiente consiste en adaptar el HTML que teníamos anteriormente en artesonico.com (prometo que quería hacerlo sin tablas pero por motivos de tiempo no he podido desarrollarlo así  ). Básicamente lo que hacemos es añadir Divs con los estados que tendrá la aplicación y asignarles un id para poder hacerlos visibles e invisibles mediante javascript e incluir las librerías.

Aquí podemos ver el HTML completo:

HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <script type="text/javascript" src="js/prototype.lite.js"></script>
  3. <script type="text/javascript" src="js/moo.ajax.js"></script>
  4. <script type="text/javascript" src="js/artesonico.js"></script>
  5. <meta http-equiv="Content-Type" content="text/html; UTF-8">
  6. <title>Artesónico. Comunidad de artistas digitales. Músicos, editores de video, efectos de sonido, Motion Graphics</title>
  7. <style type="text/css">
  8. <!--
  9. .negro {
  10.     font-size: 11px;
  11.     font-family: tahoma;
  12.     color: #000000;
  13. }
  14. .boton-negro {
  15.     font-family: Tahoma;
  16.     color: #FFFFFF;
  17.     font-size: 10px;
  18.     font-weight: bold;
  19.     background-color: #000000;
  20.     border-top-style: none;
  21.     border-right-style: none;
  22.     border-bottom-style: none;
  23.     border-left-style: none;
  24. }
  25. .campo-texto {
  26.     font-family: Tahoma;
  27.     color: #000000;
  28.     font-size: 10px;
  29.     border: thin solid #333333;
  30. }
  31. .negro-bold {font-size: 11px; font-family: tahoma; color: #000000; font-weight: bold; }
  32. -->
  33. </></style>
  34. </meta></head>div align="center">
  35.   <table width="650">    <td height="50" colspan="2">&nbsp;</td>
  36.    
  37.     <tr>
  38.       <td valign="top" width="220"><img src="imagenes/logo.png" alt="Artesónico. Comunidad de artistas digitales" width="211" height="49" /></td>
  39.       <td valign="top"><div style="display:none" id="uploading" class="negro"> Registrando cuenta en nuestra base de datos y enviando mensaje de bienvenida </div>
  40.         <div style="display: none;" id="respuesta" class="negro"></div>
  41.         <div style="display: block;" id="newsletter">
  42.           <p align="left" class="negro"><strong class="negro-bold">Artesónico.com</strong> es una comunidad de artistas digitales que pretende dar a conocer
  43.             a la industria audiovisual nuevos talentos en los campos de creación audiovisual
  44.             con tecnología.</p>
  45.           <p align="left" class="negro">Si eres músico, creador de efectos de vídeo y sonido, artista 3D, editor de vídeo o
  46.             motion graphics... este es tu sitio.</p>
  47.           <form id="form" method="post" action="insertar.php">
  48.             <label><span class="negro-bold">Email: </span>
  49.             <input name="email" type="text" class="campo-texto" id="email" />
  50.             </input></label>
  51.             <label>nput name="enviar" type="submit" class="boton-negro" value="Infórmame cuando esté online*"/>
  52.             </label>
  53.             <p class="negro">* Artesónico <strong>nunca</strong> utilizará tus datos para fines comerciales </p>
  54.           </form>
  55.         </div></td>
  56.     </tr>
  57.   </table>
  58.  
  59.  
  60. </html>

Como podemos ver, hemos incluido un script llamado artesonico.js, este archivo es el que se encarga de hacer la petición AJAX y hacer visibles los distintos estados en la web.

Actionscript:
  1. function init() {
  2.     var form = $('form');
  3.     var divRespuesta = document.createElement('div');
  4.     form.addEventListener('submit', validarEmail, false);
  5.     divRespuesta.setAttribute('id','respuesta');
  6.     form.appendChild(divRespuesta);
  7.     reiniciar()
  8. }
  9.  
  10. function insertar() {
  11.     $('uploading').style.display = 'block';
  12.     $('newsletter').style.display = 'none';
  13.     var form = $('form');
  14.     var consulta= form.email.value;
  15.     new ajax ('insertar.php', {postBody : 'email=' + consulta, update: $('respuesta'), onComplete: salida});
  16. }
  17. function salida() {
  18.     $('uploading').style.display = 'none';
  19.     $('respuesta').style.display = 'block';
  20. }
  21. function reiniciar(){
  22.     $('uploading').style.display = 'none';
  23.     $('newsletter').style.display = 'block';
  24.     $('respuesta').style.display = 'none';
  25. }
  26. function validarEmail(evt){
  27.     evt.preventDefault();
  28.     var form = $('form');
  29.     if (form.email.value == ""){
  30.       alert("Por favor ingrese su e-mail");
  31.       form.email.focus();
  32.       return;
  33.     }
  34.     if (form.email.value.indexOf('@', 0) == -1 || form.email.value.indexOf('.', 0) == -1){
  35.         alert("E-mail incorrecto");
  36.         form.email.value = "";
  37.         form.email.focus();
  38.         return;
  39.     }
  40.     insertar();
  41. }
  42. window.onload = init;

Observamos varias funciones. La primera de ella, init(), se encarga de inicializar y registrar los campos que vamos a utilizar. Prestamos especial atención a la linea 4, aquí lo que hacemos a crear un listener que escuchará los eventos de nuestro formulario para poder procesarlo mediante javascript. En este caso capturamos el evento submit y le pasamos la función validarEmail para que sea ejecutada cuando pulsemos en el botón enviar.
La función validarEmail() tiene como objetivo verificar que el correo introducido sea correcto, si todo va bien llamaremos a la función insertar(). Esta función es la llamada al AJAX y el centro de esta aplicación. Simplemente creamos una instancia de ajax con dos parámetros, el primero de ellos es el php que queremos ejecutar y el segundo es un objeto con los siguientes atributos:
postBody ->Variables que mandamos mediante post
update -> El objeto que actualizaremos
onComplete ->El manejador que será invocado una vez haya concluido la petición

En este caso hacemos que el manejador onComplete llame a salida() que se encargará de hacer visible e invisible los divs que veamos oportunos.


Etiquetas

Badge Farm

  • Firefox 2
  • CSSEdit 2
  • Textmate
  • Powered by Redoable 1.0

2 Responses to “Jugando con AJAX”


  1. 1 Marc Palau Mar 31st, 2006 at 12:50 pm

    Pues ya que te veo puesto, a ver si le echas un ojo a mi librería pAjax, que es como un loadVars pero en javascript :). la URL es:

    http://www.javascript.es/apis/pajax.htm

    Saludos! :)

  2. 2 Luis May 23rd, 2006 at 11:30 pm

    Muy bueno el tutorial, totalmente aplicable, pero lamentablemente no funciona con iexplorer (que raro .. no?)

Leave a Reply