如何单独回调 ajax 请求


How to callback ajax request separate

我正在学习使用 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(''); 
       }
}