我一直在尝试使用jQuery和Ajax验证输入字段中输入的电子邮件地址。似乎我的验证PHP中的jQuery addClass和removeClass似乎不适用于主PHP文件。
这是我的代码: -
<table cellspacing="10px" cellspacing="5px" class="sign_up_table">
<tr>
<td>
<input class="ui_input2 no_space inpt1913" id="input_email" type="email" name="i_email" style="height:25px; width:300px; font-size:16px;" required />
</td>
<td id="input_email_error">
<img src="img/a_loader.gif" id="a_loader_i" style="display:none; position:relative; top: 2px;" />
</td>
</table>
我的jQuery:
$(document).ready(function() {
$('#input_email').on('input',function(e){
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var val_i_email = $("#input_email").val();
var empty = false;
$('#input_email').each(function() {
if (val_i_email < 5 || !emailReg.test(val_i_email)) {
empty = true;
}
});
if (empty) {
$(this).addClass("invalid");
$(this).removeClass("valid");
$email_valid = false;
} else {
var i_email = $("#input_email").val();
$('#a_loader_i').show();
$.ajax({
type: "POST",
url: '/script/validate_email.php',
data: {i_email:i_email},
cache: false,
success: function(){
$("#a_loader_i").hide();
$email_valid = true;
}
});
}
});
});
PHP:
// include pdo config
include_once ('config.php');
// store the values submitted by form in variable
$email=$_POST['i_email'];
// query
foreach($pdo->query("SELECT * FROM Users WHERE email='$email'") as $row); {
if ($email == $row['Email']) {
echo "<script>
$('#input_email_error').append('This email has already been taken');
$('#input_email').addClass('invalid');
$('#input_email').removeClass('valid');
$('#a_loader_i').hide();
</script>";
}else{
echo "<script>
$('#input_email').addClass('valid');
$('#input_email').removeClass('invalid');
$('#a_loader_i').hide();
</script>";
}
}
$pdo = null;
答案 0 :(得分:1)
看起来你正在调用你希望被调用的ajax调用中的HTML。让你的PHP返回一个你检查的JSON编码的真/假,然后让成功的回调执行你在php中尝试的逻辑。
在javascript中执行:
$.ajax({
type: "POST",
url: '/script/validate_email.php',
data: {'i_email':i_email},
cache: false,
success: function(data){
if(data.valid) {
$('#input_email').addClass('valid');
$('#input_email').removeClass('invalid');
$('#a_loader_i').hide();
} else {
$('#input_email_error').append('This email has already been taken');
$('#input_email').addClass('invalid');
$('#input_email').removeClass('valid');
$('#a_loader_i').hide();
}
});
在php中:
if ($email == $row['Email']) {
$valid = false;
} else {
$valid = true;
}
echo json_encode(array('valid' => $valid));
如果电子邮件有效,您有php返回,页面本身决定如何处理。
答案 1 :(得分:0)
没有看到你的config.php,我无法看到完整的图片,但我猜你应该在你的php文件中echo json_encode($response);
$response
应包含以下内容:
如果接受电子邮件:
$response = array(
'success' => true,
'note' => "Accepted"
);
或者如果电子邮件存在/无效:
$response = array(
'success' => false,
'note' => "This email has already been taken"
);
然后在jquery中成功:
success: function(response){
if(response.success){
$('#input_email').addClass('valid');
$('#input_email').removeClass('invalid');
} else {
$('#input_email').addClass('invalid');
$('#input_email').removeClass('valid');
}
$('#input_email_error').append(response.note);
$('#a_loader_i').hide();
}
答案 2 :(得分:-1)
$email=$_POST['i_email'];
会在帖子值中查找名为i_email
的项目。如果你能看到字符串,它看起来像i_email=sting@mail.com
(也可能是url编码)。
在您的AJAX中,您将键定义为与您的值相同。所以
else {
var i_email = $("#input_email").val(); //You define your variable.
$('#a_loader_i').show();
$.ajax({
type: "POST",
url: '/script/validate_email.php',
data: {i_email:i_email}, //Outputs as 'you@mail.com:you@mail.com'
cache: false,
success: function(){
$("#a_loader_i").hide();
$email_valid = true;
}
});
}
您可能希望将i_email:i_email更改为email:i_email
或类似的内容,然后在PHP中更改$_POST['email']
。