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

时间:2015-03-20 20:13:04

标签: javascript php ajax redirect

我有一个登录页面,用户输入电子邮件和密码 所以,我能够对另一个页面进行ajax调用以配置数据 现在,如果电子邮件和密码正确,则必须将用户重定向到名为“#34; home"。”的新页面。 我尝试了,但是,它将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>

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

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

在此代码页面中,&#34; home&#34;以div显示,&#34;登录结果&#34;。

1 个答案:

答案 0 :(得分:0)

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

现在,如果您只是在成功函数中使用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 );
}