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 originalinput.addEventListener("input", function(){
//Lanzas la petición asíncrona buscando en la BD el valor ingresado en el <input>
}, 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 originalfunction Ajax(/* parámetros */){
return new Promise(function(exito, error){
var xhr = new XMLHttpRequest();
xhr.open(/* método, ruta, asíncrono */);
xhr.addEventListener("load", function(){
this.status == 200 && exito(this.textResponse); //En caso de éxito
[/* 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
}, false);
xhr.addEventListener("error", function(){
error(this.textStatus); //En caso de error
}, false);
//Otras acciones, como establecer cabeceras
xhr.send(/* cadena de consulta */);
});
}
var ejemplo = Ajax(/* parámetros */);
//Líneas más abajo
ejemplo.then(function(respuesta){ //Caso de éxito
//Instrucciones
});
//Aún más abajo
ejemplo.then(function(respuesta){ //Caso de éxito
//Instrucciones
});
//Todavía más abajo
ejemplo.then(function(respuesta){ //Caso de éxito
//Instrucciones
}, function(error){
//Aquí también podemos ver el mensaje de error, en caso haya ocurrido uno
});
//Si algo salió mal
ejemplo.catch(function(error){ //Caso de error
//Instrucciones
});
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).