Ver Mensaje Individual
  #6 (permalink)  
Antiguo 11/12/2016, 02:09
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Funciones Callback - Undefined en variable

Si buscas evitar que se ingresen datos existentes en la base de datos, puedes hacer la verificación conforme el usuario vaya llenando los campos y mostrar, a la derecha o debajo del campo, un mensaje en donde se le indique que, el dato que ingresó, existe o no en la base de datos. Para esto podrías apoyarte en eventos que indiquen que se modificó el contenido de un campo de texto, como el evento input:
Código Javascript:
Ver original
  1. input.addEventListener("input", function(){
  2.     //Lanzas la petición asíncrona buscando en la BD el valor ingresado en el <input>
  3. }, false);
Para no sobrecargar al servidor con peticiones, puedes realizarlas cuando la caja de texto pierda el enfoque (evento blur) o cuando se produzca cualquier otro evento.

Con respecto a la información que encontraste sobre el objeto diferido de jQuery, es una implementación que hizo la librería de John Resig y que representa una alternativa cross-browser al objeto Promise de JavaScript. Y no hace falta que eches mano de jQuery para utilizar una promesa; es más sencillo de lo que parece:
Código Javascript:
Ver original
  1. function Ajax(/* parámetros */){
  2.     return new Promise(function(exito, error){
  3.         var xhr = new XMLHttpRequest();
  4.        
  5.         xhr.open(/* método, ruta, asíncrono */);
  6.         xhr.addEventListener("load", function(){
  7.             this.status == 200 && exito(this.textResponse); //En caso de éxito
  8.             [/* códigos de estado HTTP distintos al 200 que indiquen algún problema, como el 404 (recurso no encontrado) */].indexOf(this.status) > -1 && error(this.textStatus); //En caso de error
  9.         }, false);
  10.         xhr.addEventListener("error", function(){
  11.             error(this.textStatus); //En caso de error
  12.         }, false);
  13.         //Otras acciones, como establecer cabeceras
  14.         xhr.send(/* cadena de consulta */);
  15.     });
  16. }
  17.  
  18. var ejemplo = Ajax(/* parámetros */);
  19.  
  20. //Líneas más abajo
  21. ejemplo.then(function(respuesta){ //Caso de éxito
  22.     //Instrucciones
  23. });
  24.  
  25. //Aún más abajo
  26. ejemplo.then(function(respuesta){ //Caso de éxito
  27.     //Instrucciones
  28. });
  29.  
  30. //Todavía más abajo
  31. ejemplo.then(function(respuesta){ //Caso de éxito
  32.     //Instrucciones
  33. }, function(error){
  34.     //Aquí también podemos ver el mensaje de error, en caso haya ocurrido uno
  35. });
  36.  
  37. //Si algo salió mal
  38. ejemplo.catch(function(error){ //Caso de error
  39.     //Instrucciones
  40. });

Como ves, puedes acceder tanto a la respuesta de éxito (todo marchó con normalidad en la petición) como al mensaje de error (en caso haya ocurrido uno), ya sea en la misma línea en la que realizas la petición o más abajo e incluso en más de una ocasión, manteniéndose siempre la respuesta inicial. El objeto diferido de jQuery contiene una promesa que trabaja de una manera muy similar; ya dependerá de ti cuál utilizar.

Un ejemplo en vivo del uso de promesas y procesos asíncronos

NOTA: La implementación nativa, además de la respuesta, sea positiva o negativa, devuelve otra promesa; mientras que, la implementación de jQuery, solo devuelve la respuesta, sea positiva o negativa (al menos hasta antes de la versión 3.0).

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 11/12/2016 a las 15:35 Razón: Ejemplo