登录后页面无法重定向

时间:2020-04-17 19:30:50

标签: php jquery ajax

您好,我是刚开始使用AJAX和jquery并尝试创建登录系统,但是当我尝试登录时成功创建了$ _SESSION,但无法重定向到下一页,我尝试使用window.location.replace,但是它似乎没有用。我一直在寻找答案,但似乎都没有用。希望有人能帮助我。

php

 try {
    // sql here
    $sql = ("SELECT * FROM users WHERE username = :username");
    $stmt = $db->connection->prepare($sql);
    $stmt->execute(array(
        ':username' => $form_USERNAME
    ));
    $row=$stmt->fetch(PDO::FETCH_ASSOC);

    //check if username is existing in database
    if($form_USERNAME == $row['username']){
        if(password_verify($form_PASSWORD, $row['user_pass'])){
            session_start();

            $_SESSION['loggedin'] = true;
            $_SESSION['userid'] = $row['user_id'];
            $_SESSION['username'] = $row['username'];
            $_SESSION['usertype'] = $row['user_type'];

            echo json_encode(array('result' => 'ok'));
        }
        else{
            echo json_encode(array(
                'error' => array(
                    'msg' => 'Invalid Username or password'
                ),
            ));
        }

    }
    else{
        echo json_encode(array(
            'error' => array(
                'msg' => 'User not found'
            ),
        ));
    }

} catch (Exception $e) {
    echo json_encode(array(
        'error' => array(
            'msg' => $e->getMessage(),
            'code' => $e->getCode(),
        ),
    ));
}

?>

jquery

<script>
$(function () {
    $('#frmLogin').on('submit', function (e) {
        e.preventDefault();
        var FormData = $('#frmLogin').serialize();

        $.ajax({
            type: 'post',
            url: '../forms/login.php',
            data: FormData,
            dataType: 'json',
            encode: true,
            beforeSend: function () {
                $('#frmBtnLogin').text("Logging in");
            },
            success: function (data) {
                if (data.error) {
                    $('#frmLoginUsername').text('');

                    alert(data.error.msg);
                } else {
                    alert(data.result);

                }

                $('#frmBtnLogin').text("Log in");
            }
        });
    });
});

所以我尝试在网上搜索答案,并尝试了一些方法,但仍然无法正常工作

更新jquery

<script>
$(function () {
    $('#frmLogin').on('submit', function (e) {
        e.preventDefault();
        var FormData = $('#frmLogin').serialize();

        $.ajax({
            type: 'post',
            url: '../forms/login.php',
            data: FormData,
            dataType: 'json',
            encode: true,
            beforeSend: function () {
                $('#frmBtnLogin').text("Logging in");
            },
            success: function (data) {
                if(data.result == "ok"){

                    window.location.replace("user-home.php");
                }
                else if (data.error) {
                    $('#frmLoginUsername').text('');

                    alert(data.error.msg);

                $('#frmBtnLogin').text("Log in");
            }
        }
        });
    });
});

1 个答案:

答案 0 :(得分:1)

使用AJAX与服务器通信时,服务器无法将用户重定向到适当的页面。您的前端将只接收最终重定向的响应数据。

如果您未使用AJAX ,则可以将类似以下内容的内容附加到您的php脚本中:

header('Location: https://my.page/to/redirect/to.php');

但是由于您使用的是AJAX,因此您的前端将只接收重定向提供的数据,就像正常响应一样。

相反,请考虑让您的AJAX实现评估HTTP响应状态:

// Your PHP script
try {
    // check validity
    http_response_code(200); // OK response status
    echo $response;
} catch (\Throwable $exception) {
    // handle error
    http_response_code(401); // Not OK response status
    echo $response;
}

然后让您的前端检查响应中的http状态代码,以决定下一步要做什么。

例如:

// when handling the asynchronous reponse in Javascript
if (xhr.status === 200) {
    // redirect to successful login page
    window.location.href = 'https://my.page/succesful-login';
} else {
    // redirect to invalid login page
    window.location.href = 'https://my.page/invalid-login';
}