Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/03/2012, 11:20
Avatar de Naahuel
Naahuel
 
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 8 meses
Puntos: 192
Respuesta: Ajax con la funcion Load

Yo te propondría los siguientes cambios:

Prueba: http://nahueljose.com.ar/ejemplos/ajax-test/
Código:
Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Formulario</title>
  5. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
  6. <script type="text/javascript" language="javascript">
  7. $(document).ready(function(){
  8.     //objetos del dom que uso con frecuencia
  9.     var img_cargando = $("#cargando");
  10.     var cont_destino = $("#destino");
  11.     var formulario = $('#formulario');
  12.     //asignación de evento
  13.     formulario.submit(function(evento){
  14.         evento.preventDefault();            //no enviar el formulario
  15.         img_cargando.show();                //mostrar cargando
  16.         //generar datos
  17.         var datos = formulario.serialize();
  18.         //pedido ajax
  19.         var pedido = $.ajax({
  20.             url : 'mostrar-datos.php',
  21.             data : datos,
  22.             cache : false
  23.         });
  24.         //cuando el pedido esté listo...
  25.         pedido.done(function(resultado){
  26.             img_cargando.hide();            //ocultar cargando
  27.             cont_destino.html(resultado);   //cargar el resultado
  28.         });
  29.         //limpiar el formulario
  30.         formulario.each(function(){
  31.             this.reset();
  32.         });
  33.     });
  34. });
  35. <style type="text/css">
  36. body{
  37.     background-color:#444;
  38.     color:#FFF;
  39. }
  40. h2{
  41.     text-align:center;
  42.     font-family:Verdana, Geneva, sans-serif;
  43.     font-size:28px;
  44. }
  45. .contiene-formulario{
  46.     width:500px;
  47.     background-color:#222;
  48.     color:#FFF;
  49.     border-radius:8px;
  50.     margin:auto;
  51.     font-size:22px;
  52. }
  53. .formulario{
  54.     margin-left:10px;
  55.     margin-right:10px;
  56. }
  57. .boton{
  58.     border-radius:8px;
  59.     font-size:18px;
  60.     background-color:#444;
  61.     color:#FFF;
  62. }
  63. .cargando{
  64.     display:none;
  65. }
  66. .nofloat{
  67.     clear:both;
  68. }
  69. .destino{
  70.     width:500px;
  71.     background-color:#222;
  72.     color:#FFF;
  73.     border-radius:8px;
  74.     margin:auto;
  75.     font-size:22px;
  76.     margin-top:25px;
  77. }
  78. .destino p{
  79.     margin-left:10px;
  80. }
  81. </head>
  82.  
  83. <h2>Envio de datos mediante jquery y la funcion load</h2>
  84. <div class="contiene-formulario"><br />
  85.   <form id="formulario" name="formulario" class="formulario" method="get" action="">
  86.   <fieldset><legend>Datos para el registro:</legend>
  87.   <table width="85%" align="center">
  88.       <tr>
  89.         <td width="30%">Nombre:</td>
  90.         <td width="70%"><input type="text" name="txtNombre" id="txtNombre" /></td>
  91.       </tr>
  92.       <tr>
  93.         <td>Apellidos:</td>
  94.         <td><input type="text" name="txtApellidos" id="txtApellidos" /></td>
  95.       </tr>
  96.       <tr>
  97.         <td>Telefono:</td>
  98.         <td><input type="text" name="txtTelefono" id="txtTelefono" /></td>
  99.       </tr>
  100.       <tr>
  101.         <td>Sexo:</td>
  102.         <td>
  103.         <select name="txtSexo" id="txtSexo">
  104.         <option>Masculino</option>
  105.         <option>Femenino</option>
  106.         </select></td>
  107.       </tr>
  108.       <tr>
  109.         <td>Edad:</td>
  110.         <td>
  111.         <select name="txtEdad" id="txtEdad">
  112.         <option>18</option>
  113.         <option>19</option>
  114.         <option>20</option>
  115.         <option>21</option>
  116.         <option>22</option>
  117.         <option>23</option>
  118.         <option>24</option>
  119.         </select>
  120.         </td>
  121.       </tr>
  122.       <tr>
  123.         <td align="right"><input type="submit" name="btEnviar" id="btEnviar" class="boton" value="Enviar" /></td>
  124.         <td align="right"><div class="cargando" id="cargando"><img src="http://s13.postimage.org/55b1f5hqf/loading2.gif" alt="load" /></div></td>
  125.       </tr>      
  126.     </table></fieldset><br />
  127.   </form>
  128. </div>
  129. <div class="nofloat"></div>
  130. <div class="destino" id="destino"></div>
  131. </body>
  132. </html>

Observá lo siguiente:
  • Saqué la obtención de los objetos del DOM fuera de la función. Es más eficiente que recorrer todo el DOM cada vez que se ejecuta la función.
  • Cambié el evento click sobre el botón a un submit para que funcione al presionar enter. Además, hay que cambiar el botón de type="button" a type="submit".
  • Cambié de .load() a $.ajax por muchos motivos. Principalmente porque no es necesario pasar una variable aleatoria a la URL, basta con poner cache:false. Además, podemos usar .serialize(), que permite adaptar este código a cualquier formulario sin estar armando el URL manualmente. Mejor, no? El código queda muuuucho más limpio y comprensible.
  • $.ajax devuelve un .primise() de un deferred, que permite usar .done() para limpiar el código y además usar cuantas funciones callback querramos.

Estas son prácticas que yo siempre trato de seguir para un código de más calidad y sobre todo, que me permita utilizarlo en otros proyectos fácilmente.

¿Se solucionó con esto tu problema? (Yo no lo noté al principio tampoco...)
__________________
nahueljose.com.ar