javascript - 处理ajax响应异常

标签 javascript php ajax

我目前正在使用 php 处理表单并通过 ajax 请求调用它,我想处理显示小 div 而不是基本弹出窗口的异常 所以我根据响应文本执行了多个 if 条件,但是其中一个异常没有得到处理 此异常是空字段异常,它总是显示错误的用户名或密码

这是ajax调用

function sendLogin(){
    username = $('#loginEmail').val();
    password = $('#loginPassword').val();
    a = $.ajax({
        type: 'post',
        data: 'username='+username+'&password='+password,
        url: '/account/login.php',
        async: false,
    });

    if(a.responseText == "LoggedIn"){
        $("#WrongPW_Error").fadeOut("fast");
        $("#Empty_Error").fadeOut("fast");
        $("#LoggedIn").fadeIn("fast");
        setTimeout(location.reload(),2200);
     }
        else if(a.responseText == "Empty_Fields") {
          //alert(a.responseText);
          $("#WrongPW_Error").fadeOut("fast");
          $("#Empty_Error").fadeIn("fast");
     }
        else if(a.responseText == "Wrong_Credentials") {
          //alert(a.responseText);
          $("#Empty_Error").fadeOut("fast");
          $("#WrongPW_Error").fadeIn("fast");
    }
}

这是 php 文件

<?php
if(!isset($_POST['username']) || !isset($_POST['password'])){
    echo "Empty_Fields";
    die();
}

$username = $_POST['username'];
$password = $_POST['password'];

$hashed_pass = hash("sha512", $password);
$stmt = $dbh->prepare("SELECT Count(email)as total, username from Users where email = :username and password= :password");
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $hashed_pass, PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$total = $row['total'];
if($total == 1){
    session_start();
    $_SESSION['user'] = $username;
    $_SESSION['user_name'] = $row['username'];
    echo "LoggedIn";
    die();
}
else{
    echo "Wrong_Credentials";
    die();
}
?>

最佳答案

您没有在 PHP 中执行正确的检查来查看 POST 变量是否为空。

阅读:What's the difference between 'isset()' and '!empty()' in PHP?

isset($_POST['username'])
如果 POST 参数存在,即使其内容是空字符串,

也会返回true。您需要这两项测试:issetempty .

if(!isset($_POST['username']) || !isset($_POST['password'])){
    echo "Missing_Param";
    die();
}

if(empty($_POST['username']) || empty($_POST['password'])){
    echo "Empty_Fields";
    die();
}

关于javascript - 处理ajax响应异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201767/

相关文章:

javascript - 从 Javascript 构造函数内部调用函数

php - 如何获取表行的值并在 else if 语句中使用它

javascript - 如何使用成功和失败处理程序的引用重试 Ajax 调用

javascript - Webpack HMR 不重新加载 HTML 文件

javascript - 表单序列化不包括表

javascript - 在回调中使用cursor.continue()

php - 有没有办法通过 Internet 访问 Intranet Web 应用程序

php - 在数据库中找不到事件记录类 "tablename"的表 "TableClass"

Php Query In循环不更新数据库

ajax - 前后端同步数据