Ajax 注册不返回任何值或错误

Ajax registration not returning any value or error

本文关键字:错误 任何值 返回 注册 Ajax      更新时间:2023-09-26

Ajax在我的注册表中无法正常运行。我有一个名为 register_process.php 的注册页面。

我运行$_POST中的变量并回显出变量$error。然后我想使用这个变量并将其添加到 id #register_msg 的div 中。变量$error将包含div包装和内容。

但是,我没有收到来自 ajax 请求的错误或成功反馈。我也没有收到任何控制台错误。怎么来了?

这是我的Ajax代码:

<script src="/scripts/jquery-2.1.4.min.js"></script>
<script>
$(document).ready(function(){
    $('#reg_register').click(function(){
        var fullname=$("#reg_fullname").val();
        var email=$("#reg_email").val();
        var password1=$("#reg_password1").val();
        var password2=$("#reg_password2").val();
        var register=$("#reg_register").val();
        var dataString = 'fullname='+fullname+'&email='+email+'&password1='+password1+'&password2='+password2+'&register='+register;
        $.ajax({
            type: "POST",
            url: "register_process.php",
            data: dataString,
            cache: false,
            beforeSend: function(){
                $("#reg_register").val('Connecting...');
            },
            success: function(result){
                if(result){
                    $("#register_msg").html(result);
                }
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert('error');
            } 
        });
    });
});
</script>

我的表格

<form method="post">
     Fullname:<br>
     <input type='text' name='fullname' id="reg_fullname" /><br>
     Email:<br>
     <input type="text" name="email" id="reg_email" /><br>
     Password:<br>
     <input type="password" name="password1" id="reg_password1" /><br>
     Confirm password:<br>
     <input type="password" name="password2" id="reg_password2" /><br>
     <input type="submit" name="register" value="Register" id="reg_register" /> 
</form>

我的 PHP 注册检查:

$req_error = "";
$req_success = "";
/** REGISTRATION FORM **/
if(isset($_POST['register'])){
    if((!empty($_POST['fullname'])) AND (!empty($_POST['email'])) AND (!empty($_POST['password1'])) AND (!empty($_POST['password2']))){
        /** FROM POST TO VARIABLE **/
        $email = $_POST['email'];
        $fullname = $_POST['fullname'];
        $password1 = $_POST['password1'];
        $password2 = $_POST['password2'];
        /** VALIDATE EMAIL **/
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
            $req_error .= $database_reg_6;
        }
        /** DUPLICATE EMAIL **/
        $sql = "SELECT id FROM users WHERE email = :email LIMIT 1";
        $result = $db_connect->prepare($sql);
        if($result->execute(array(':email' => $email))){
            $email_count = $result->rowCount();
            if($email_count != 0){
                $req_error .= $database_reg_7;
            }
            $result = NULL;
        }
        else{
            $req_error .= $database_reg_8;
        }
        /** CHECK FULL NAME **/
        $regex = "/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+/";
        if(!preg_match($regex, $fullname)){
            $req_error .= $database_reg_9;
        }
        /** CHECK PASSWORD **/
        if($password1 !== $password2){
            $req_error .= $database_reg_10;
        }
        /** AFTER VALIDATION OF FORM **/
        if(empty($req_error)){
            $password_hash = password_hash($password, PASSWORD_BCRYPT);
            $unique_veri = getToken(10);
            $sql = "INSERT INTO users (access_level, fullname, email, password, verification,registered) VALUES ('0',:fullname,:email,:password,:verification, NOW())";
            $result = $db_connect->prepare($sql);
            if($result->execute(array(':fullname' => $fullname,':email' => $email, ':password' => $password_hash, ':verification' => $unique_veri))){
                $mail_receiver  = $email;
                $mail_subject   = 'Account verification required';
                $verify_url = 'http://'.$_SERVER['SERVER_NAME'].'/register?v='.$unique_veri;
                $mail_message  = 'This email contains your verification URL. Click it to confirm you are the correct owner of the account.<br>';
                $mail_message .= '<a href="'.$verify_url.'">Verification Link</a><br>';
                $mail_headers   = 'Content-type: text/html; charset=utf-8'."'r'n".'From: example.no <dont-reply@example.no>'."'r'n".'Reply-To: example.no <dont-reply@example.no>'."'r'n".'X-Mailer: PHP/'.phpversion();
                if(mail($mail_receiver, $Mail_subject, $mail_message, $mail_headers)){
                    $req_success .= $database_reg_11;
                }
                else{
                    $req_error .= $database_reg_12;
                }
            }
            else{
                $req_error .= $database_reg_13;
            }
        }
    }
    else{
        $req_error .= $database_reg_14;
    }
}
if(!empty($req_error)) {
    echo '<div id="register-msg-e">';
    echo '<div id="register-discard"><img src="/img/mobile-menu-active.png" height="15px" width="15px" alt="Discard Button"></div>';
    echo '<p>'.$req_error.'</p>';
    echo '</div>';
}
elseif(!empty($req_success)){
    echo '<div id="register-msg-s">';
    echo '<div id="register-discard"><img src="/img/mobile-menu-active.png" height="15px" width="15px" alt="Discard Button"></div>';
    echo '<p>'.$req_success.'</p>';
    echo '</div>';
}

终于我想通了。您的 HTML 字段位于表单内。当您单击"提交"按钮时,您会触发 ajax 请求,该请求实际上完成了它的工作,但表单也会提交给自己(重新加载页面),因为它没有动作标签,清理您的div#register_msg 的内容,它具有您的 ajax 调用的 PHP 响应。

只需从HTML中删除FORM标签,一切都会好起来的。

取消按钮的默认操作,以便表单不会提交。

$('#reg_register').click(function( event ){
    event.preventDefault();
    /* rest of your code */
});