Configuré este script para verificar si la dirección de correo electrónico existe en la base de datos o no:
function checkemail(){ var e = document.getElementById("email").value; if(e != ""){ document.getElementById("emailstatus").innerHTML = 'checking ...'; $.ajax({ type:'get', url:'{!! URL::to('checkEmailExists') !!}', data:{'email':e}, success:function(data){ // console.log(data); if(Object.keys(data).length === 0) { document.getElementById("emailstatus").style.color = "red"; document.getElementById("emailstatus").innerHTML = e + " is NOT OK"; }else{ document.getElementById("emailstatus").style.color = "green"; document.getElementById("emailstatus").innerHTML = e + " is OK"; } }, error:function(){ } }); } }Entonces, el código funciona bien, pero el único problema proviene de esta verificación de condición que siempre devuelve VERDADERO :
if(Object.keys(data).length === 0) Básicamente, si ingreso una dirección de correo electrónico que no existe en la base de datos, se devolverá como data (resultados de console.log(data) ):
{}De lo contrario, devolverá este obj:
{ "id": 1, "name": "Myname", "email": "myemail@yahoo.com", "email_verified_at": null, "created_at": "2022-02-09T05:49:27.000000Z", "updated_at": "2022-02-09T05:49:27.000000Z" }Entonces necesito verificar correctamente si el objeto devuelto está vacío o no.
Pero parece que if(Object.keys(data).length === 0) no está verificando correctamente esa condición, ya que siempre es VERDADERO y, por lo tanto, la declaración [email] is OK aparece en la página.
Entonces, ¿cómo verificar correctamente si el objeto devuelto está vacío o no?
Object.keys debería funcionar:
Le sugiero que verifique dos veces los parámetros enviados a la función de success .
Puede verificar una propiedad específica, si no está allí, será undefined , lo que significa que no obtuvo una respuesta correcta.
Combinar undefined con || para obtener un "valor si no está establecido", da:
success:function(data) { var success = (data.id || 0) > 0; Simplemente puede verificar if (data.id == undefined) , pero hay una serie de advertencias al comparar con undefined