在对WordPress自定义注册表的AJAX响应中显示成功或错误消息

时间:2015-06-09 作者:Jeff

我在Wordpress页面模板中有此自定义表单

<?php if(!is_user_logged_in()) {
if(get_option(\'users_can_register\')) { 
    if($_POST){
        $username = $wpdb->escape($_REQUEST[\'user_login\']);
        if(empty($username)) {
            echo "<span style=\'color:#FF0000\'><strong>Error..</strong></span><br /><br />You have to fill in the username.";
            exit();
        }
        $email = $wpdb->escape($_REQUEST[\'user_email\']);
        if(!preg_match("/^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$/", $email)) {
            echo "<span style=\'color:#FF0000\'><strong>Error..</strong></span><br /><br />please use a calid e-mailadress.";
            exit();
        }

        //$random_password = wp_generate_password( 12, false );
        $pass1 = $wpdb->escape($_REQUEST[\'pass1\']);
        $pass2 = $wpdb->escape($_REQUEST[\'pass2\']);
        if ($pass1 != $pass2){
            echo "<span style=\'color:#FF0000\'><strong>Error..</strong></span><br /><br />please use a passwords don\'t match.";
                exit();

        }
        $random_password = $pass1;
        $status = wp_create_user( $username, $random_password, $email );
        if ( is_wp_error($status) )
            echo "<span style=\'color:#FF0000\'><strong>Feil..</strong></span><br /><br />Username allready exist. please try another one.";
        else {
            $from = get_option(\'admin_email\');
            $headers = \'From: \'.$from . "\\r\\n";
            $subject = "Registration ok!";
            $msg = "Welcome, you are now registered. Here is your username and password.\\Info:\\Username: $username\\Password: $random_password";
            wp_mail( $email, $subject, $msg, $headers );
            echo "<strong>You are now registered. An e-mail is now sent to you with your username and password..";
        }

        exit();

    } else { ?>

        <form method="post" action="<?php echo site_url(\'wp-login.php?action=register\', \'login_post\') ?>" id="registerform" class="col-xs-12" name="registerform">
            <div class="row">
                <div class="col-xs-12 col-md-6">
                    <p>
                        <label for="user_login">Username</label>
                        <input id="user_login" class="input" type="text" size="20" value="" name="user_login">
                    </p>
                    <p>
                        <label for="user_email">Email</label>
                        <input id="user_email" class="input" type="email" size="25" value="" name="user_email">
                    </p>
                    <p>
                        Password <input type="password" name="pass1" size="25" value="">
                        Repeat Password <input type="password" name="pass2" size="25" value="">
                    </p>
                </div>
                <div class="submit">
                    <input id="wp-register" class="button-primary pull-right col-xs-12 col-md-3" type="submit" value="Register" name="wp-submit" tabindex="103">
                    <input type="hidden" value="/login-area/?action=register&success=1" name="redirect_to">
                    <input type="hidden" name="user-cookie" value="1" />
                </div>
            </div>
        </form>

        <script type="text/javascript">                         
        jQuery("#wp-register").click(function() {
            var input_data = jQuery(\'#registerform\').serialize();
            jQuery.ajax({
                type: "POST",
                url:  "<?php echo "http://" . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\']; ?>",
                data: input_data,
                success: function(data){
                    alert(\'Success\');
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.status); // I would like to get what the error is
                }
            });
            return false;
        });
        </script>
<?php }
} else ?>
    Already registered? Login to your account with the form in the sidebar.
<?php } else { ?>
You are already logged in...
<?php } ?>
PHP似乎工作正常,因为当我控制台记录它时,当出现错误时,我会得到正确的消息。

如何在Ajax成功或错误函数中显示这些错误?

即使有一些错误,我使用的代码似乎总是能够到达success函数。

我想知道有哪些错误,并在页面的某个地方打印一条带有错误类型的消息,如果成功,我想打印一条成功的消息。

3 个回复
最合适的回答,由SO网友:Jeff 整理而成

多亏了@websupporter,我才找到了问题的解决方案。

我在Ajax函数中使用了以下内容:

success: function(data){
    jQuery(data).find(\'.message\').appendTo(\'#login-error\');
}
在php代码中,我做到了这一点:

...
if(empty($username)) {
    echo "<span class=\'message error\'>Please enter username.</span>";
    exit();
}
...
我希望这将有助于某人。

SO网友:websupporter

如何在Ajax成功或错误函数中显示这些错误?

当请求本身失败(例如超时等)时,会触发jQuery错误。看见the jQuery documentation.

PHP生成的错误消息仅在请求成功时出现。

要显示这些,您可以执行以下操作,例如:

            success: function(data){
                jQuery( data ).appendTo( \'body\' );
            }
但它需要一些样式:)

编辑:因为在脚本中,整个form-元素,您可以通过在success-回调:

        success: function(data){
            if( ! data.match( /<form/ ) )
                jQuery( data ).appendTo( \'body\' );
        }
所以您可以使用正则表达式来防止追加输出,您可能不想输出。

SO网友:HADI

我遇到了同样的问题。以上任何一项都不适合我。请确保将ajax调用的数据类型设置为“html”而不是“json”

示例代码:

$.ajax({
    url: ajaxurl,
    type: \'POST\',
    dataType: \'html\',
    cache: false,
    data: { data: data, action: \'jseditajax\' }
})
.done(function(response) {
    response = response.slice(0, - 1); // removing 0 at last string position
    response = JSON.parse(response); // string to JSON

    console.log(response);
});
在PHP文件中,您可以简单地-

echo json_encode($your_array);
我希望这有帮助!

结束

相关推荐

WooCommerce-使用WooCommerce.php时不显示产品

奇怪的情况-我安装了WooCommerce,默认情况下,/shop,/cart等页面工作正常。但是,格式已经关闭,所以我尝试按照指示制作一个“woocommerce.php”模板。这包含对“woocommerce\\u content()的调用”例如,现在当我加载/购物页面时,除了产品之外,所有内容都会显示出来-它们不在那里。没有woocommerce。php模板,产品显示刚刚好。我有什么遗漏吗-吉姆