如何通过ajax调用将用户重定向到页面

How to redirect user to a page by an ajax call?

本文关键字:重定向 用户 何通过 ajax 调用      更新时间:2023-09-26

我有一个登录页面,用户在其中输入电子邮件和密码
所以,我能够对另一个页面进行ajax调用,以配置数据
现在,如果电子邮件和密码是正确的,那么它必须将用户重定向到一个名为"主页"的新页面
我试过了,但它将div重定向到了页面上
有什么解决方案吗
提前谢谢大家!

    <script type="text/javascript">
    $(document).ready(function (e) {
        $(".login-form").on('submit',(function(e) {
            e.preventDefault();
            $.ajax({
                url: "verify/login.php",
                type: "POST",
                data:  new FormData(this),
                contentType: false,
                cache: false,
                processData:false,
                success: function(data)
                {
                    $(".login-result").html(data);
                },
                error: function() 
                {
                }           
            });
        }));
    });
</script>

这是一个简单的请求代码,它的工作完全正常
现在,在login.php.的php文件中

if ($email == $dbemail && $password == $dbpassword) {
    header("location:home");
}

在这段代码中,页面"home"显示在div"login-result"中。

问题是,在ajax请求之后,login.php脚本将标头发送回浏览器,其中包含302(重定向)状态代码,然后浏览器发送另一个针对主页的GET请求,该请求的结果将作为ajax调用的成功返回。因此,您可以在.login-result分区中放置一个完整的主页

现在,如果您只在success函数中使用window.location调用,您将获得以上所有内容以及主页的另一个get请求。

一种解决方案是将响应作为具有成功或错误状态的JSON对象发送。示例:

// login.php
if ($email == $dbemail && $password == $dbpassword) {
    die( json_encode( [ 'success' => 1 ] ) );
} else {
    die( json_encode( [ 'success' => 0, 'error' => 'invalid username or password' ] ) );
}

这样,您就可以知道登录是否成功,然后可以选择适当的操作(重定向或显示错误)。更不用说避免不必要的请求了。

dataType: 'json',
success: function( data )
{
    if ( data.success ) window.location = "home.php"; // change location
    else $(".login-result").html( data.error );
}