Javascript 为什么我的ajax登录脚本不能工作?

Javascript 为什么我的ajax登录脚本不能工作?,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我需要一个学校项目的AJAX登录脚本。 但它实际上不起作用,因为当我尝试登录时,我会被踢到startpage登录表单,没有任何消息 这是我的后端脚本login2.php: if(empty($_POST['loginEmail']) || empty($_POST['loginPassword'])) { $error[] = "Bitte füllen Sie alle Felder aus!"; } if (!empty($_POST['loginEmail']) &&

我需要一个学校项目的AJAX登录脚本。 但它实际上不起作用,因为当我尝试登录时,我会被踢到startpage登录表单,没有任何消息

这是我的后端脚本login2.php:

if(empty($_POST['loginEmail']) || empty($_POST['loginPassword'])) {
    $error[] = "Bitte füllen Sie alle Felder aus!";
}
if (!empty($_POST['loginEmail']) && !filter_var($_POST['loginEmail'], FILTER_VALIDATE_EMAIL)) {
    $error[] = "Bitte geben Sie eine gültige E-Mail-Adresse an!";
} 
if(count($error)>0) {
    $resp['msg'] = $error;
    $resp['status'] = false;
    echo json_encode($resp);
    exit;
}

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email AND `uPassword` = :password";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':email' => $_POST['loginEmail']));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($row)>0) {
    if(!password_verify($_POST['loginPassword'],$row[0]['uPassword'])) {
        $error[] = "Falsches Passwort!";
        $resp['msg'] = $error;
        $resp['status'] = false;
        echo json_encode($resp);
        exit;
    }
    session_start();
    $_SESSION['Email'] = $row[0]['uEmail'];
    $resp['redirect'] = "dashboard.php";
    $resp['status'] = true;
    echo json_encode($resp);
    exit;
}
else {
    $error[] = "Falsche E-Mail-Adresse!";
    $resp['msg'] = $error;
    $resp['status'] = false;
    echo json_encode($resp);
    exit;
}
这是登录表单中我的JS部分:

$(function() {
    $('#login').click(function(e){
        let self = $(this);
        e.preventDefault();
        self.prop('disabled',true);
        var data = $('#login-form').serialize();
        $.ajax({
            url: '/login2.php',
            type: "POST",
            data: data,
        }).done(function(res) {
            res = JSON.parse(res);
            if(res['status']) {
                location.href = "dashboard.php";
            } else {
                var errorMessage = "";
                console.log(res.msg);
                $.each(res['msg'],function(index,message) {
                    errorMessage += '<p>' + message + '</p>';
                });
                $("#error-msg").html(errorMessage);
                $("#error-msg").show();
                self.prop('disabled',false);
            }
        }).fail(function() {
            alert("error");
        }).always(function(){
            self.prop('disabled',false);
        });
    });
});

当我尝试在表单中添加action=/login2.php时,我得到一个HTTP 500错误和一条消息,表示此时无法处理此请求。

我不确定这是否是您的主要问题,但这是一个重要问题。您正在准备两个参数:

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email AND `uPassword` = :password";
但你只绑定了一个:

$stmt->execute(array(':email' => $_POST['loginEmail']));
您不希望在选择中包含密码,因为您稍后将使用密码验证来验证密码。将SQL更改为:

$sql = "SELECT * FROM `users` WHERE `uEmail` = :email";

在PHP中启用错误:并查看是什么导致500个错误啊。在学校编程的记忆中,login.php不起作用,您创建login2.php是为了不覆盖以前的工作。您无法获得任何更详细的错误吗?当我尝试在表单中添加action=/login2.php时…您为什么需要这样做?如果ajax工作正常,则数据提交到的URL由ajax设置中的行URL:“/login2.php”确定。因此,改变动作应该没有什么区别。当然,这是假设您已将JS事件正确绑定到submit按钮,并且它没有执行标准回发…但是由于我们看不到表单代码,因此无法确定这一点。你做了什么调试?您的JS代码和ajax调用是否确实得到执行?另外,我注意到,成功登录后,您将通过location.href=dashboard.php;行将用户发送到另一个页面;。既然这样做了,那么通过AJAX登录的真正目的是什么?AJAX存在的全部原因是允许您与服务器对话,但也可以保持在同一页面上。如果您只是想在ajax成功的那一刻立即重新指导,那么使用ajax真的有点毫无意义。您最好执行标准回发,并定义重定向服务器端,然后在此过程中保存大量JS代码。@ADyson我见过很多关于ajax的问题都有相同的行为。我从来没能让OP明白这是多么没有意义