Javascript JQuery Ajax PHP验证注册
我目前正在尝试使用Jquery验证我的注册表单,Jquery在用户提交表单后运行 我有以下jquery函数:Javascript JQuery Ajax PHP验证注册,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我目前正在尝试使用Jquery验证我的注册表单,Jquery在用户提交表单后运行 我有以下jquery函数: $('#signupForm').submit(function() { if($('#email').val() == "" || $('#password').val() == "" || $('#repassword').val() == "" ){ alert('empty form'); ret
$('#signupForm').submit(function() {
if($('#email').val() == "" ||
$('#password').val() == "" ||
$('#repassword').val() == "" ){
alert('empty form');
return false;
}
if($('#password').val() != $('#repassword').val()){
alert('password does not match');
return false;
}
//check if email is available
var isemailavailable = true;
$.ajax({
url: "php_includes/registerlogic.php",
type: "POST",
data: {checkemail: $('#email').val()},
dataType: 'json',
}).done(function(data){
var resultObject = $.parseJSON(JSON.stringify(data));
//alert(data);
console.log(resultObject.data);
if(resultObject.data=='taken') {
//return false;
console.log('inside taken');
isemailavailable = false;
console.log(isemailavailable);
}else{
alert($.trim(data));
isemailavailable = true;
}
});
if(isemailavailable == false){
alert("email already exists!");
return false;
}
});
$.ajax({
url: "php_includes/registerlogic.php",
type: "POST",
data: {checkemail: $('#email').val()},
dataType: 'json',
}).done(function(data){
var resultObject = $.parseJSON(JSON.stringify(data));
//alert(data);
console.log(resultObject.data);
if(resultObject.data=='taken') {
//return false;
console.log('inside taken');
isemailavailable = false;
console.log(isemailavailable);
}else{
alert($.trim(data));
isemailavailable = true;
}
if(isemailavailable == false){
alert("email already exists!");
//return false;
}
});
Ajax点击此页面查看电子邮件可用性:
if(isset($_POST["checkemail"])){
$email = preg_replace('#[^a-z0-9]#i', '', $_POST['checkemail']);
$query = $db->query('SELECT * FROM users WHERE user_email= :email LIMIT 1', array(':email'=>$_POST['checkemail']));
$isavailable = "";
if(count($query) < 1){
$isavailable = 'available';
}else{
$isavailable = 'taken';
}
$respond = array("data" => $isavailable);
$out = json_encode($respond);
echo $out;
exit();
}
好的,我这里的问题是Jquery,在我得到ifisemailavailable==false部分之前,一切都正常。即使isemailavailable为false,代码也不会进入。因此,表单将作为返回false在if语句中提交。我也试过如果!我可以用,但效果不好
非常感谢您的任何帮助或建议。
谢谢你的问题是if语句在ajax请求完成之前运行
您应该将该代码块移动到.done函数中:
$('#signupForm').submit(function() {
if($('#email').val() == "" ||
$('#password').val() == "" ||
$('#repassword').val() == "" ){
alert('empty form');
return false;
}
if($('#password').val() != $('#repassword').val()){
alert('password does not match');
return false;
}
//check if email is available
var isemailavailable = true;
$.ajax({
url: "php_includes/registerlogic.php",
type: "POST",
data: {checkemail: $('#email').val()},
dataType: 'json',
}).done(function(data){
var resultObject = $.parseJSON(JSON.stringify(data));
//alert(data);
console.log(resultObject.data);
if(resultObject.data=='taken') {
//return false;
console.log('inside taken');
isemailavailable = false;
console.log(isemailavailable);
}else{
alert($.trim(data));
isemailavailable = true;
}
});
if(isemailavailable == false){
alert("email already exists!");
return false;
}
});
$.ajax({
url: "php_includes/registerlogic.php",
type: "POST",
data: {checkemail: $('#email').val()},
dataType: 'json',
}).done(function(data){
var resultObject = $.parseJSON(JSON.stringify(data));
//alert(data);
console.log(resultObject.data);
if(resultObject.data=='taken') {
//return false;
console.log('inside taken');
isemailavailable = false;
console.log(isemailavailable);
}else{
alert($.trim(data));
isemailavailable = true;
}
if(isemailavailable == false){
alert("email already exists!");
//return false;
}
});
虽然在处理函数中的所有内容时不需要额外的
返回false也不会执行您期望它在那里执行的操作,因此也没有必要这样做
您可能应该在电子邮件字段失去焦点时立即对其运行验证,并在其无效时禁用“提交”按钮
另一种方法是将async设置为false以获取同步ajax请求:
$.ajax({
url: "php_includes/registerlogic.php",
type: "POST",
data: {checkemail: $('#email').val()},
dataType: 'json',
async: false
}).done(function(data){
但就我个人而言,我会在字段失去焦点后立即/尽快进行电子邮件验证。您好,谢谢您的帮助。是的,这确实给了我alertemail已经存在,这意味着它现在正在工作,但返回false并没有阻止表单提交。知道这是为什么吗?似乎return false在ajax中不起作用done@user3170763我只是在我的答案末尾加了一些关于这个的东西。哦,是的,很抱歉刚才看到了。好的,我将在它失去对一个单独函数的关注后尝试验证。非常感谢你的帮助