提问者:小点点

PHP Ajax如何重新加载和重定向页面?


我有简单的注册表单在php和检查输入与ajax验证和控制提交表单与ajax。 一切都很好。 除了一件事。 问题是:点击submit按钮后,ajax将成功结果加载到相同的注册表单中,并且不会重新加载页面和重定向。

我想用ajax表单提交重新加载register.php页面并将其重定向到register.php?action=joined

在ajax之前,register.php有自己的语句,如果注册成功($_get['action']=='joined'),它将重定向并销毁注册表单,并显示成功表单。

我给你看了我的密码。 我知道为什么它不起作用,但我不知道如何处理这件事。

RegisterControl.php

<?php

if(isset($_POST['fullname'])){
    //fullname validation
    $fullname = $_POST['fullname'];

    if (! $user->isValidFullname($fullname)){
        $infofn = 'Your name must be alphabetical characters';      
        echo '<p>'.$infofn.'</p>';
    }       
}

//if form has been submitted process it
if(isset($_POST['submit']) && $_POST['submit'] == 'register'){  

    //create the activasion code
    $activasion = md5(uniqid(rand(),true));
    
    try {

        //insert into database with a prepared statement
        $stmt = $db->prepare('INSERT INTO members (fullname) VALUES (:fullname, :email, :active)');
        $stmt->execute(array(
            ':fullname' => $fullname,           
            ':email' => $email,
            ':active' => $activasion
        ));
        $id = $db->lastInsertId('memberID');

        //send email
        $to = $_POST['email'];
        $subject = "Verify Your Account";
        $body = "<p>Thank you for registering on the demo site.</p>
        <p>Hello ".$fullname.", Please click this link to activate your account: <a href='".DIR."activate.php?x=$id&y=$activasion'>".DIR."activate.php?x=$id&y=$activasion</a></p>";

        $mail = new Mail();
        $mail->setFrom(SITEEMAIL);
        $mail->addAddress($to);
        $mail->subject($subject);
        $mail->body($body);
        $mail->send();

        //redirect to index page
        header('Location: register.php?action=joined');
        exit;

    //else catch the exception and show the error.
    } catch(PDOException $e) {
        $error[] = $e->getMessage();
    }   
}
?>

register.php和ajax验证

<script type="text/javascript">
    $(document).ready(function(){

        $("#fullname").keyup(function(event){
            event.preventDefault();
            var fullname = $(this).val().trim();
            if(fullname.length >= 1){
                $.ajax({
                    url: 'registercontrol.php',
                    type: 'POST',
                    data: {fullname:fullname},
                    success: function(response){
                    // Show response
                    $("#vfullname").html(response);
                    }
                });
            }else{
                $("#vfullname").html("");
            }
        });     

        $('#submit').click(function(event){
            event.preventDefault();
            var formData = $('#register-form').serialize();
            console.log(formData);
            $.ajax({
                url: 'registercontrol.php',
                method: 'post',
                data: formData + '&submit=register'
            }).done(function(result){
                $('.hidden').show();
                $('#result').html(result);              
            })
        });                 

    });
</script>

<?php
    //if action is joined show sucess
    if(isset($_GET['action']) && $_GET['action'] == 'joined'){                              
        echo '<div>
                <p>Registration is successful, please check your email to activate your account.</p>                                                
                </div>';                                    
} else { ?>
<div>
    <h1>Create an Account!</h1>                                 
</div>
<form id="register-form" role="form" method="post" action="registercontrol.php" autocomplete="off">                             
                                            
    <input type="text" name="fullname" id="fullname" placeholder="Your name" value="" required>                                     
    <div id="vfullname"></div>                      
    <input type="email" name="email" id="email" placeholder="Your Email" value="" required>
                                                                
    <input id="submit" type="submit" name="submit" value="Create Account">

    <p class="hidden">Please check everything.</p>                              
    <div id="result"></div>

</form>
<?php } ?>

共1个答案

匿名用户

检查done块并使用JavaScript执行重定向:

$('#submit').click(function(event){
        event.preventDefault();
        var formData = $('#register-form').serialize();
        console.log(formData);
        $.ajax({
            url: 'registercontrol.php',
            method: 'post',
            data: formData + '&submit=register'
        }).done(function(result){
            var url_to_redirect = "register.php?action=joined";
            window.location.href = url_to_redirect;
        })
    });