2015-07-22 156 views
1

你好,我有问题,表单提交后重定向。 我使用简单的ajax窗体显示登录错误在一个div。ajax表单提交后重定向

$(document).ready(function(){ 
$('#formlogin').on('submit', function (e) { 

    $.ajax({ 
     type: 'POST', 
     url: 'login.php', 
     data: $(this).serialize(), 
     success: function(data) { 
     $('div#ack').empty().append(data); 

     } 

    }); 

    e.preventDefault(); 
}); 

的问题是后提交成功并不重定向到“logged_in.php”

这里是php登录。

if (empty($username) === true || empty ($password) === true) { 
    $errors [] = 'Please enter both username and password!'; 

} else if (user_exists($username) === false) { 
    $errors [] = 'We can not find the name. Have you registered?'; 
} else { 

    $login = login($username, $password); 
    if ($login === false) { 
     $errors [] = 'This user name or password is incorrect.'; 

    } else { 

     $_SESSION['user_id'] = $login; 
     header('Location: logged_in.php'); 
     exit(); 

    } 


} 

回答

3

如果您重定向这是所谓的用AJAX页面时,它会重定向父页面。

你应该做的是回声的东西,识别出用户成功登录

也许不是header('Location: logged_in.php');你把:

echo "success"; 

然后,在你成功的功能:

success: function(data) { 
    if (data == "success") 
     window.location = "logged_in.php"; 
    else 
     alert("Wrong password."); 
} 

请注意,在ajax中success并不意味着您已经成功登录,只是意味着对页面的请求re转过来没有错误(500)。你仍然需要决定你想要用你的数据做什么。

+0

谢谢你,现在我得到它:) – Demko

0

这里有两个不同的东西。

1 - 您的AJAX功能。 它是在一个页面上异步调用服务器

2 - 您的登录页面。 它被您的页面调用,包含AJAX

您的第二页中的代码发生在服务器中,而您的客户端中发生了AJAX代码。

您应该在您的php登录页面返回成功消息,然后在您的成功回调中检查消息是否是正确的,这将意味着用户已成功登录。一旦你检查消息是正确的,你可以重定向用户从你的成功回调,做: location.href = "yourUrl"