【发布时间】:2017-10-18 02:30:26
【问题描述】:
我有一个 HTML 表单,它在发布时会触发一个 JQuery 脚本来检查验证函数,然后再将数据发送到 ajax 调用以将数据插入到 mySQL 数据库中。
它可以正常工作,除非它正在运行 ajax 检查以查看发布的电子邮件地址是否已存在于数据库中。
如果来自 ajax 调用的响应不是“成功”,我需要 email_error 变量返回 true。我的代码:
function validate_add_relative() {
var check_error = false;
var email_error = false;
var title = document.forms["add_relative_form"]["title"].value;
if (title == null || title == "") {
check_error = true;
}
var first_name = document.forms["add_relative_form"]["first_name"].value;
if (first_name == null || first_name == "") {
check_error = true;
}
var surname = document.forms["add_relative_form"]["surname"].value;
if (surname == null || surname == "") {
check_error = true;
}
var phone = document.forms["add_relative_form"]["phone"].value;
if (phone == null || phone == "") {
check_error = true;
}
var email = document.forms["add_relative_form"]["email"].value;
if (email == null || email == "") {
check_error = true;
}
var address = document.forms["add_relative_form"]["address"].value;
if (address == null || address == "") {
check_error = true;
}
var postData = $(this).serializeArray();
$.ajax(
{
url : '<?php echo WEB_URL . 'controllers/ajax/check_relative_email.php'; ?>',
type: "POST",
data : postData,
success:function(data, textStatus, jqXHR) {
if(data == 'success') {
email_error = false;
return true;
}
else {
alert('test');
email_error = true;
$('.relative_email_error').removeClass('hidden');
$('.relative_email_error').html('Email is already in use. Please choose another.');
}
},
error: function(jqXHR, textStatus, errorThrown)
{
$('.relative_email_error').removeClass('hidden');
$('.relative_email_error').html('Error. Please try again later.');
email_error = true;
}
});
if (email_error == true) {
alert("Please choose another email address, that one is already in use.");
return false;
}
if (check_error == true) {
alert("Please ensure you fill in all mandatory fields.");
return false;
}
if (email_error == false && check_error == false) {
return true;
}
}
$('.add_relative_form').submit(function(e) {
e.preventDefault();
if(validate_add_relative()) {
var ajaxurl = '<?php echo WEB_URL; ?>controllers/ajax/add_relative.php',
form_data = $('.add_relative_form').serialize();
$.post(ajaxurl, form_data, function (response) {
//location.reload();
});
}
});
当运行上面的代码时,第一部分(表单验证)会正常工作,它还会发出警报并在之后隐藏类。但它继续运行并且没有捕捉到 email_error 在警报行之后设置为 true 的事实。所以它继续通过代码并通过最后一个ajax post controllers/ajax/add_relative.php添加条目
【问题讨论】:
-
在您的
$('.add_relative_form').submit中,如果您在alert/console.logvalidate_add_relative()中得到什么? -
为什么不使用
.blur并检查电子邮件是否存在,然后是否禁用提交按钮?