« # »

Formulario hibrido AJAX + sinJS

Una de las utilidades que se le puede sacar al AJAX es el hecho de mandar un formulario al servidor sin la necesidad de recargar la página. Eso en pequeños experimentos o en páginas simples no tiene ninguna utilidad, pero podemos ver claros ejemplos de buenos usos en portales extensos donde la carga de toda la página puede representar el gasto de hasta un minuto dependiendo de la conexión.

Un ejemplo es la pantalla de entrada de AdSense de Google o bien el apartado de alta en la newsletter de Promsite. Ambos sistemas funcionan con y sin javascript activo.

A continuación os dejo un ejemplo, programado utilizando la librería pAJAX, donde podéis ver mediante un formulario que valida un usuario en el servidor sin necesidad de recargar página (al estilo login de AdSense) un posible buen uso de AJAX:

HTML:
  1. <?
  2. if($REQUEST_METHOD == "POST"){
  3.     $ajax = $_POST[ajax];
  4.     $usuario = trim($_POST[usuario]);
  5.     $clave = trim($_POST[clave]);
  6.    
  7.     $datos_usuario = (ereg("^[a-zA-Z0-9]*$",$usuario)&&($usuario!=""));
  8.     $datos_clave = (ereg("^[a-zA-Z0-9]*$",$clave)&&($clave!=""));
  9.    
  10.     if($ajax == 1){
  11.         if(!$datos_usuario){ die("&code=2&msg=Error en los datos de usuario&"); }
  12.         if(!$datos_clave){ die("&code=2&msg=Error en los datos de contrase%F1a&"); }
  13.        
  14.         $procesa = true;
  15.     }else{
  16.         if(!$datos_usuario){ $msg="Introduzca un nombre de usuario v&aacute;lido."; }
  17.         if(!$datos_clave){ $msg="La contrase&ntilde;a introducida no es v&aacute;lida."; }
  18.        
  19.         if(!$datos_usuario||!$datos_clave){
  20.             $procesa = false;
  21.         }else{
  22.             $procesa = true;
  23.             $msg = "Se encuentra como usuario del sistema.";
  24.         }
  25.     }
  26.    
  27.    
  28.     if($procesa){
  29.         /*************************************************/
  30.         // Código de proceso de variables
  31.         /*************************************************/
  32.     }
  33.    
  34.     if($ajax == 1){
  35.         echo "&code=1&msg=Se encuentra como usuario del sistema&";
  36.     }
  37. }
  38. ?>
  39.     <title>ejemplo formulario ajax no obtrusivo</title>
  40.     <script type="text/javascript" src="loadVars.js"></script>
  41.     <script type="text/javascript">
  42.         enviar_datos = function(){
  43.             var usuario = document.formulario.usuario.value;
  44.             var clave = document.formulario.clave.value;
  45.            
  46.             document.getElementById("msg_error").innerHTML = "Enviando datos del formulario, espere.";
  47.             document.getElementById("submit_btn").disabled = true;
  48.            
  49.             // Creamos la conexión LoadVars.
  50.             var conexion = new LoadVars();
  51.             // definimos las variables
  52.             conexion.usuario = usuario;
  53.             conexion.clave = clave;
  54.             conexion.ajax = 1;
  55.             // definimos la función de callback
  56.             conexion.onLoad=function(){
  57.                 if(this.code == 1){ //OK
  58.                     document.getElementById("datos_form").innerHTML = "<div id=\"msg_error\">"+unescape(this.msg)+"</div>";
  59.                 }else if(this.code == 2){ //ERROR
  60.                     document.getElementById("msg_error").innerHTML = unescape(this.msg);
  61.                     document.getElementById("submit_btn").disabled = false;
  62.                 }
  63.             }
  64.             // Enviamos los datos al servidor
  65.             conexion.sendAndLoad(document.formulario.action,conexion,"POST");
  66.            
  67.             return false; //PARA QUE NO HAGA EL SUBMIT
  68.         }
  69.     </script>
  70.     <style type="text/css">
  71.         #msg_error{
  72.             color:red;
  73.             margin:10px;
  74.             font-weight:bold;
  75.         }
  76.     </style>
  77. </head>
  78.     <div id="datos_form">
  79.         <div id="msg_error"><?=$msg?></div>
  80. <? if(!$procesa){ ?>
  81.         <form name="formulario" action="<?=$PHP_SELF?>" method="post" onsubmit="return enviar_datos();">
  82.             <label for="usuario">Usuario: </label><input type="text" name="usuario" id="usuario" /><br />
  83.             <label for="clave">Clave: </label><input type="text" name="clave" id="clave" /><br />
  84.             <input type="submit" value="Enviar datos!" id="submit_btn" />
  85.         </form>
  86. <? } ?>
  87.     </div>
  88. </body>
  89. </html>

Podeis trastear con esto en la página de ejemplo

Comentarios

Deja un comentario

(*: Datos necesarios para dejar un comentario)

Get Adobe Flash playerPlugin by wpburn.com wordpress themes