Ver Mensaje Individual
  #17 (permalink)  
Antiguo 18/10/2012, 07:50
Avatar de maycolalvarez
maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Mensaje de alert para cuando el regisrtro existe en la base de datos

gracias @Dradi7, ahora si puedo ver claramente uno de los problemas y espero @satjaen que no tomes mal el regaño, yo ya estaba a punto de hacerlo, sólo ten en cuenta que no es nada personal y que nosotros queremos que aprendas

Volviendo al tema:

recuerda que AJAX es asíncrono, por lo tanto no puedes retornar a la función anterior el resultado de la petición AJAX, porque siempre te devolverá null o false, la solucíon radical para que funcione es que lo coloques de modo sincrono, lo cual NO es lo ideal.

La solución Ideal es pasar el callback, de esa forma no se pierde el flujo debido al desfase de la petición asíncrona, he aquí la técnica:

Código Javascript:
Ver original
  1. function nuevoAjax() {
  2.     var xmlhttp=false;
  3.     try {
  4.         xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
  5.     }
  6.         catch(e){
  7.         try{
  8.             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  9.         }catch(E) {
  10.             if (!xmlhttp && typeof XMLHttpRequest!='undefined')
  11.                 xmlhttp=new XMLHttpRequest();
  12.         }
  13.     }
  14.     return xmlhttp;
  15. }
  16.  
  17. function TelefonoExiste(telefono, _callback) {
  18.     var ajax=nuevoAjax();
  19.     ajax.open("GET", "valida1.php?telefono=" + encodeURIComponent(telefono), true);
  20.     ajax.onreadystatechange=function() {
  21.         if ((ajax.readyState==4) && (ajax.status==200)){
  22.             //ejecutamos _callback como si fuese una función, pasandole el parámetro
  23.             _callback(ajax.responseText);
  24.         }
  25.     }
  26.     ajax.send(null);
  27. }
  28.  
  29. function GuardaFormulario() {
  30.     //usemos mejor las CoLECCIONES, y variables, así ahorramos codigo y lo hace fácil de mantener
  31.     var _telefono = document.forms['form1'].elements['telefono'];
  32.  
  33.     if (_telefono.value.length == 0){
  34.         alert("Insertar el Teléfono");
  35.         _telefono.focus();
  36.         return 0;
  37.     }
  38.    
  39.     //lamamos a AJAX:
  40.     TelefonoExiste(_telefono.value, function(resp) {
  41.         //evaluamos la respuesta del server, tengase en cuenta que responseText devuelve un string, por lo tanto hay que parsear a entero si se evalúa un numero:
  42.         if (parseInt(resp) == 1) {
  43.             //aqui seria bueno un mensaje
  44.             alert('el teléfono ya existe');
  45.             _telefono.focus();
  46.         } else {
  47.             //evaluar si se envía el form desde aquí, o se usa ajax para enviarlo.
  48.             alert("El formulario se envio con exito!");
  49.             document.forms['form1'].submit();
  50.         }
  51.     });
  52.     //como ajax es asincrono, JS NO se detendrá en la llamada anterior, por lo tando hay que retornar false o 0 como lo tienes:
  53.     return 0;
  54. }
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 18/10/2012 a las 07:56