Php重定向导致302进行ajax重定向

时间:2017-07-06 09:30:36

标签: php jquery ajax

这是我登录控制器的核心脚本,这意味着用户的所有清理和验证都已完成。

LoginController.php中的代码

if ( password_verify($valid['pass'], $pass) ) {
    // My session stuffs

    header('Content-Type: application/json');
    echo json_encode (array(
        'result' => 'success',
        'msg' => 'Login successful..! You will be redirected in a moment'
    ));
    redirect('user/profile'); //Ajax redirect only works when I remove this.
    exit;
}

login.php中的代码

try {
    LoginController::UserLogin(); // Calling my method inside my controller
} catch (Exception $e) {

    echo json_encode(array(
        'error' => array(
            'msg' => $e->getMessage()
        ),
    ), JSON_PRETTY_PRINT);
    header('Content-Type: application/json');
    exit;

}


<form id="login_form" action="<?php echo htmlspecialchars(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>" class="form" method="POST">
    <div class="form-group">
        <input type="text" name="login_username" placeholder="Enter username" class="form-control" />
    </div>
    <div class="form-group">
        <input type="password" name="login_pass" placeholder="Enter password" class="form-control" />
    </div>
    <div class="form-group">
        <input type="text" name="login_security" placeholder="Enter Security 25 * 2" class="form-control" />
    </div>
    <button class="btn btn-green" id="login-btn">Login</button>

</form>

我的ajax部分

$('#login_form #login-btn').on('click', function (e) {
    e.preventDefault();

    $.ajax({
        url : $('#login_form').attr('action'),
        type: 'POST',
        dataType: 'json',
        data: $('#login_form').serialize(),
        success: function(data) {
            console.log(data);
            if (data.error) {
                $('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>');
            }
            if ( data.result === 'success' ) {
                $('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>');
                setTimeout('window.location.href = "user/profile.php";',3000);
            }
        }
    });
});

我的问题:一切正常,直到我使用ajax。这意味着没有Ajax的页面显示错误,一切都很好。但是当我使用ajax时会返回错误,但是当登录详细信息正确时(有效详细信息)页面会被卡住(页面未被重定向)。

当我检查开发者控制台时,我看到的是302用于登录页面并且没有进行重定向(但是当我从Login控制器表单中删除标题时,这会导致当用户没有JavaScript时没有重定向禁用)。

enter image description here

1 个答案:

答案 0 :(得分:0)

试试这个,看它是否有效:

在LoginController.php中:删除redirect部分之后的echo

在Login.php中,将header放在echo部分之前。

在Ajax部分中,像这样使用success部分:

success: function(data) {
        console.log(data);
        if (data.error) {
            $('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>');
        }
        if ( data.result === 'success' ) {
            $('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>');
            // -> here
            // correct setTimeout function
            setTimeout(function(){
                window.location = "user/profile.php";
            },3000);
        }
    }