提交后ajax表单重定向

时间:2015-07-22 01:39:42

标签: javascript php jquery ajax forms

你好我在提交表单后遇到重定向问题。 我使用简单的ajax表单在div中显示登录错误。

$(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 个答案:

答案 0 :(得分:5)

如果您重定向使用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并不意味着您已成功登录,只是意味着返回的页面请求没有错误(500)。您仍需要确定要对数据执行的操作。

答案 1 :(得分:0)

这里有两件不同的事情。

1 - 您的AJAX功能。 它位于以异步方式调用服务器的页面上

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

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

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

答案 2 :(得分:0)

下面的一些生产代码对我来说非常有用,提交表单然后重定向。

$.ajax({
        url: "QuoteReload.php",
        type: 'GET',
        data: 'batchid=' + bid + '&operation=archiveBatch',
    success: function(response) { 
                // window.location.href = "EditItem.php?batchid=" + bid + "&quoteitemid=NEW";
                $(location).attr('href', 'Quote.php?QuoteId=<?php echo $QuoteId; ?>')
            },
    error: function(xhr) {
            $(ddl).css("background-color", "#4C25BC");
            alert('Delete Batch error: ' + xhr); 
             }
});