我正在为我的网站构建一个注册表单我使用jquery验证我的注册页面我希望在所有字段都以有效方式填充后执行该操作然后注册页面重定向或加载并将数据存储在数据库中...
1。第一个jquery代码检查输入字段
2。然后在jquery代码中有一个ajax调用,检查电子邮件是否已经存在,如果ajax调用返回true,那么数据将被插入数据库中,如果它返回false则页面将不会加载并显示电子邮件已存在的消息
我的代码中的问题是,当ajax调用为true或false时,我的页面会继续加载并在数据库中插入数据,但我希望如果value为false,则不会加载页面。
这是我的代码
$.ajax({
type:'POST',
url:'email_validator.php',
data:{email:mail},
success:function (response){
var result = $.parseJSON(response);
if (result.status===false) {
$('#error').html("Email alreaday exist");
return false;
} if(result.status===true) {
return true;
}
}
});
,这是我的email_validator.php
<?php
if(isset($_POST["email"])){
$result = array();
$email=$_POST["email"];
$db=new PDO("mysql:host=localhost;dbname=the_scops","root","");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH=$db->prepare("SELECT email FROM signup WHERE email=?");
$STH->execute([$email]);
if($STH->rowCount() == 1){
//echo "Email alreday exist";
$result["status"] = false;
}
else{
$result["status"] = true;
}
echo json_encode($result);
exit(0);
}
答案 0 :(得分:0)
您可以将async选项添加到false并返回到ajax调用之外:
function testAjax() {
var resultStatus = "";
$.ajax({
type:'POST',
url:'email_validator.php',
async: false,
data:{email:mail},
success:function (response){
var result = $.parseJSON(response);
resultStatus = result.status;
if (result.status===false) {
$('#error').html("Email alreaday exist");
}
}
});
return resultStatus;
}
<强> [UPDATE] 强>
但是你不需要在客户端检查这个。你可以检查email_validator.php
中是否存在电子邮件,如果不存在则立即将其写入数据库:
<强> email_validator.php 强>
<?php
if(isset($_POST["email"])){
$result = array();
$email=$_POST["email"];
$db=new PDO("mysql:host=localhost;dbname=the_scops","root","");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH=$db->prepare("SELECT email FROM signup WHERE email=?");
$STH->execute([$email]);
if($STH->rowCount() == 1){
//echo "Email alreday exist";
$result["status"] = false;
}
else{
$result["status"] = true;
// --> INSERT the new email into the database
}
echo json_encode($result);
exit(0);
}
答案 1 :(得分:0)
试试这个:
$.ajax({
type:'POST',
url:'email_validator.php',
data:{email:mail},
success:function (response){
if (response.status === true) {
return true;
} else {
$('#error').html("Email alreaday exist");
return false;
}
}
});
答案 2 :(得分:0)
在我看来,你应该调用PHP API方法直接在成功函数回调中插入新的电子邮件:
$.ajax({
type: 'POST',
url: 'email_validator.php',
data: {email: mail},
success: function (response) {
var result = $.parseJSON(response);
if (result.status === false) {
$('#error').html("Email already exists");
}
else (result.status === true) {
// -> Call here the PHP api method to insert the new email in the database
}
}
});