我正在学习使用 php 使用 ajax 的方法,现在我发送请求;
$.ajax({
url: 'check_exists.php',
type: "POST",
data: registerForm.serialize(),
success: function(data) {
console.log(data)
registerMsg = $('.registerMsg');
if (data == 'nickname_exists') {
nickname.addClass('error');
} else if (data == 'email_exists') {
email.addClass('error');
} else {
registerMsg.html('');
}
}
});
现在,这将发送到php文件并检查数据是否存在,如果我输入昵称,我会得到nickname_exist
回来,如果我对电子邮件做同样的事情,我会得到email_exists
。
但是现在,如果我同时获得两个数据,它就会控制台.log就像nickname_existsemail_exists
这样它不会触发 if 语句。
我从PHP文件发送,例如;
require_once('db_connect.php');
if(isset($_POST['nickname'])){
$nickname = $_POST['nickname'];
$st = $db->prepare("SELECT * FROM users WHERE nickname=?");
$st->bindParam(1, $nickname);
$st->execute();
if($st->rowCount() > 0) { echo 'nickname_exists'; }
}
if(isset($_POST['email'])){
$email = $_POST['email'];
$st = $db->prepare("SELECT * FROM users WHERE email=?");
$st->bindParam(1, $email);
$st->execute();
if($st->rowCount() > 0) { echo 'email_exists'; }
}
我如何解决这个问题,以及我处理 ajax 到 php 的方式是正确的,有人可以帮我一把吗?
我需要让它成为控制台.log就像
nickname_exists
email_exists
而不是
nickname_existsemail_exists
将结果收集到如下所示的数组中:
require_once('db_connect.php');
//Initalize the array
$result = array(
'nickname_exists' => 0,
'email_exists' => 0
);
if(isset($_POST['nickname'])){
$nickname = $_POST['nickname'];
$st = $db->prepare("SELECT * FROM users WHERE nickname=?");
$st->bindParam(1, $nickname);
$st->execute();
if($st->rowCount() > 0) {
$result['nickname_exists'] = 1;
}
}
if(isset($_POST['email'])){
$email = $_POST['email'];
$st = $db->prepare("SELECT * FROM users WHERE email=?");
$st->bindParam(1, $email);
$st->execute();
if($st->rowCount() > 0) {
$result['email_exists'] = 1;
}
}
//Gives back the result in JSON.
echo json_encode($result);
然后带着 json 返回。在此之后,您可以在javascript中检查所有这些:
//Initialize the hasError
var hasError = false;
if (data.nickname_exists == 1) {
//Set error for nickname
nickname.addClass('error');
hasError = true;
}
if (data.email_exists == 1) {
//Set error for email
email.addClass('error');
hasError = true;
}
//If we had no error:
if (!hasError) {
registerMsg.html('');
}
使用存储变量并像下面这样使用它:
require_once('db_connect.php');
$what_exists = [];
if(isset($_POST['nickname'])){
$nickname = $_POST['nickname'];
$st = $db->prepare("SELECT * FROM users WHERE nickname=?");
$st->bindParam(1, $nickname);
$st->execute();
if($st->rowCount() > 0) { $what_exists[] = 'nickname_exists'; }
}
if(isset($_POST['email'])){
$email = $_POST['email'];
$st = $db->prepare("SELECT * FROM users WHERE email=?");
$st->bindParam(1, $email);
$st->execute();
if($st->rowCount() > 0) { $what_exists[] = 'email_exists'; }
}
echo json_encode($what_exists);
将该变量输出为 JSON,并对 AJAX 调用进行更改,如下所示:
$.ajax({
url: 'check_exists.php',
type: "POST",
data: registerForm.serialize(),
dataType: 'json',
success: function(data) {
console.log(data)
registerMsg = $('.registerMsg');
if ($.inArray(data, 'nickname_exists')) {
nickname.addClass('error');
} else if ($.inArray(data,'email_exists')) {
email.addClass('error');
} else {
registerMsg.html('');
}
}
});
您需要以 json 格式返回数据
echo json_encode(array('nickname_exists'=>1,'email_exists'=>1)); //here 1 is for true and 0 if for false
在JS中,您需要编写此代码
$.ajax({
url: 'check_exists.php',
type: "POST",
data: registerForm.serialize(),
success: function(data) {
parsedData = jQuery.parseJSON(data);
registerMsg = $('.registerMsg');
if (parsedData.nickname_exists != 1) {
nickname.addClass('error');
} else if (parsedData.email_exists !=1) {
email.addClass('error');
} else {
registerMsg.html('');
}
}
});
$.ajax({
url: 'check_exists.php',
type: "POST",
data: registerForm.serialize(),
success: function(data) {
myfunction(data);
}
});
function myfunction(data){
console.log(data)
registerMsg = $('.registerMsg');
if (data == 'nickname_exists') {
nickname.addClass('error');
} else if (data == 'email_exists') {
email.addClass('error');
} else {
registerMsg.html('');
}
}