(更新)如何将AJAX错误处理添加到(完全)自定义注册表中?

时间:2014-05-15 作者:Designer 17

Update 2.1:

好吧,在把这件事弄得一团糟之后,我记得我没有包括导致白屏的JS文件,哎呀!;)

现在表单既不提交数据也不发送电子邮件。。。还有error handling 仍不工作。

我有一张登记表wp_create_user 功能,以便我可以限制谁注册到我的网站!我现在正尝试将其调整为AJAXify,以实现错误处理和“更平滑”和更轻松的用户体验。

服用后@Andrew Bartel\'在他的建议下,我下定决心,“至少要努力”朝着正确的方向前进。

这是我的updated 问题:由于某种原因,我不知道,我的页面仍希望在提交表单时刷新。。但当它这样做时,它不会刷新到“同一页”,而是整个屏幕变为白色,没有错误或任何东西。我完全迷路了!

以下是我正在使用的文件/代码。。。

The registration form (custom-uploader.php):

<h1 class="register-header">Register a new user</h1>

<a class="logout" href="<?php echo wp_logout_url( get_permalink() ); ?>">Logout</a>

<div id="form-messages"></div>

<form id="register-form" method="post" action="<?php echo plugins_url( \'register.php\', dirname( __FILE__ )); ?>">
    <!-- Username -->
    <p>
        <input type="text" name="user_name" id="user_name" class="input" placeholder="unique username" required>
    </p>

    <!-- Email to send p/w to -->
    <p>
        <input type="email" name="user_email" id="user_email" class="input" placeholder="email address" required>
    </p>

    <!-- Hidden Nonce "input" -->
    <?php wp_nonce_field( \'nonceification\', \'register_nonce\' ); ?>

    <p class="small-text">You will receive an email with a generated password<br />(which you can change in your "user settings")</p>
    <button type="submit" id="wp-submit" class="btn">Register new user</button>
</form>

Attempted AJAX file (register.js)

jQuery.noConflict();

jQuery(function() {

    // Get the form.
    var form = jQuery(\'#register-form\');

    // Get the messages div
    var formMessages = jQuery(\'#form-messages\');

    // Set up an event listener for the contact form
    jQuery(form).submit(function(event) {

            // Stop the browser from submitting the form
            event.preventDefault();

            // Serialize the form data
            var formData = jQuery(form).serialize();

            jQuery.ajax({
                    type: \'POST\',
                    url: jQuery(form).attr(\'action\'),
                    data: formData 
            }).done(function(response) {

                    // Make sure that the form Messages div has the \'success\' class
                    jQuery(formMessages).removeClass(\'register-error\');
                    jQuery(formMessages).addClass(\'register-success\');

                    // Set the message text
                    jQuery(formMessages).text(response);

                    // Clear form
                    jQuery(\'#user_name\').val(\'\');
                    jQuery(\'#user_email\').val(\'\');
            }).fail(function(data) {

                    // Make sure that the formMessages div has the \'error\' class
                    jQuery(formMessages).removeClass(\'register-success\');
                    jQuery(formMessages).addClass(\'register-error\');

                    // Set the message text
                    if(data.responseText !== \'\') {

                            jQuery(formMessages).text(data.responseText);
                    }else{
                            jQuery(formMessages).text(\'Oops! An error occurred and your request was not sent.\');
                    }
            });
    });
});

The actual registration process (register.php)

<?php

require_once( \'/home5/desigoe6/public_html/demo/dominion-skills/wp-load.php\' );

$username = $_POST[\'user_name\'];
$email = $_POST[\'user_email\'];

// Verify nonce field
$nonce = $_POST[\'register_nonce\'];
if ( !wp_verify_nonce( $nonce, \'register_nonce\' )) {

    die();
}

// Sanitize user input data
$username = sanitize_user( $username, $strict = true );
$email = santize_email( $email );

// Validate email format
$email_val = filter_var( $email, FILTER_VALIDATE_EMAIL );

// Check if user\'s chosen name/email already exists
$user_id = username_exists( $username );
$user_email = email_exists( $email );

// Parse data, if \'good\' execute
if ( $user_id && $user_email ) {

    http_response_code(400);
    echo "Oops! There appears to be an account already with that name and/or email.";
    exit;

} elseif ( !$email_val ) {

    http_response_code(400);
    echo "Please enter a valid email and retry!";
    exit;

} else {

    // Generate the password and create the user
    $password = wp_generate_password( 12, false );
    $user_id = wp_create_user( $username, $password, $email );

    // Update user
    wp_update_user( array( \'ID\' => $user_id ));

    // Set user role
    $user = new WP_User( $user_id );
    $user->set_role( \'subscriber\' );

    // Email user their password
    $mail = wp_mail( $email, \'Your new password!\', \'Here\\\'s your new password: \' . $password );

    if ( $mail ) {

        http_response_code(200);
        echo "Success! Check your email for your password! Logout and use your new username & password.";
    } else {

        http_response_code(500);
        echo "Um, it looks like there was any error and we failed to receive your request ... if this problem persists please let us know!";
    }
}?>
还有,如果你看到other 缺陷或“不良做法”正在使用中,请让我知道。。。我还在想这东西是怎么工作的。

谢谢

1 个回复
SO网友:Marcin

我认为这里的主要问题是,您试图使用“fail”来指示表单出错的状态。这是错误的,因为即使表单有错误,ajax调用也会“成功”,因为从jquery的角度来看,它进行了ajax调用并得到了响应。

仅在404错误等情况下调用Fail。

结束

相关推荐

JQuery AJAX添加了json2依赖吗?

我正在Wordpress中使用jQuery和AJAX开发投票系统。为了使这个投票系统工作,我需要在我的主题中使用jQuery。所以在我的函数中写下了代码。php。但出于某种原因,我的剧本什么都没做。Watch my full vote script here.所以我开始阅读抄本,发现here 要包含用于AJAX调用的jQuery,需要json2依赖项。有没有人有这方面的经验,可以告诉我需要如何包括这一点,因为jQuery已经在Wordpress中注册了,所以我是否需要再次注册jQuery并将json2依赖