este código no funciona, porque siempre devuelve indefinido. En mi opinión, el "éxito" del ajax debería volver, si el resultado está ahí.
¿Cómo asegurarse de que se devolverá el valor booleano?
<script> $('#sbtn').on("click", function(e) { e.preventDefault(); // if user exists, set validated to true var validated = checkUser('requestedUser'); // if the user is validated, submit form if(validated) { //alert("Thank You"); $('#setup').submit(); } } function checkUser(user) { data = { lernsax_email: user } $.ajax({ type: "POST", url: "checkuser.php", data: data, success: function(msg){ if(msg === "passed") { // php returns "passed", if the user can be found console.log(msg); return true; } else { console.log(msg); return false; } }, }); } </script>puedes usar promesa
<script> $('#sbtn').on("click", function(e) { e.preventDefault(); // if user exists, set validated to true let result = checkUser('requestedUser'); result.then(validated => { if(validated) { //alert("Thank You"); $('#setup').submit(); } }); } function checkUser(user) { data = { lernsax_email: user } return new Promise(resolve => { $.ajax({ type: "POST", url: "checkuser.php", data: data, success: function(msg){ if(msg === "passed") { // php returns "passed", if the user can be found console.log(msg); resolve(true); } else { console.log(msg); resolve(false); } }, }); }); } </script>o mover
if(validated) { //alert("Thank You"); $('#setup').submit(); }a la función de éxito de ajax
<script> $('#sbtn').on("click", function(e) { e.preventDefault(); // if user exists, set validated to true checkUser('requestedUser'); } function checkUser(user) { data = { lernsax_email: user } $.ajax({ type: "POST", url: "checkuser.php", data: data, success: function(msg){ if(msg === "passed") { // php returns "passed", if the user can be found console.log(msg); $('#setup').submit(); return true; } else { console.log(msg); return false; } }, }); } </script>