使用AJAX构建自定义登录表单

时间:2013-11-13 作者:Designer 17

我正在尝试使用此教程WordPress AJAX Login Without a Plugin – The Right Way Natko Hasic构建了一个登录、注册和忘记密码表单,可以处理所有事情,包括AJAX错误消息。教程和我的项目之间的区别是。。。我不想在弹出窗口中这样做,而是在一个插件中这样做,而不是在根主题文件夹中。

这是我的代码。。。

页面模板中的代码:

<form name="login_form" id="login_form" class="login_form" action="" method="post">
    <p class="status"></p>

    <p>
        <input type="text" name="username" id="username" placeholder="Username" />
    </p>

    <p>
        <input type="password" name="password" id="password" placeholder="Password" />
    </p>

    <button name="submit" id="submit" class="btn"><?php _e("Sign in", "shorti"); ?></button>
    <a class="lost" href="<?php echo wp_lostpassword_url(); ?>">Lost your password?</a>

    <?php wp_nonce_field( \'ajax-login-nonce\', \'security\' ); ?>

</form>
在我的主插件中运行的代码。php文件:

 <?php // The php script I\'m trying to run

    add_action( \'init\', \'ajax_login_init\' );
    function ajax_login_init() {

        wp_register_script( \'ajax-login-script\', plugin_dir_url( __FILE__ ) . \'js/ajax-login-script.js\', array(\'jquery\') );
        wp_enqueue_script( \'ajax-login-script\' );

        wp_localize_script( \'ajax-login-script\', \'ajax_login_object\', array(
            \'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
            \'redirecturl\' => home_url(),
            \'loadingmessage\' => __( \'Sending user info, please wait...\' )
        ));

        // Enable the user with no privileges to run ajax_login() in AJAX
        add_action( \'wp_ajax_nopriv_ajaxlogin\', \'ajax_login\' );
    }

    // Check if users input information is valid
    function ajax_login() {
        // First check the nonce, if it fails the function will break
        check_ajax_referer( \'ajax-login-nonce\', \'security\' );

    //Nonce is checked, get the POST data and sign user on
    $info = array();
        $info[\'user_login\'] = $_POST[\'username\'];
        $info[\'user_password\'] = $_POST[\'password\'];
        $info[\'remember\'] = true;

    $user_signon = wp_signon( $info, false );
    if ( is_wp_error( $user_signon )) {
        echo json_encode( array( \'loggedin\'=>false, \'message\'=>__( \'Wrong username or password!\' )));
    } else {
        echo json_encode( array( \'loggedin\'=>true, \'message\'=>__(\'Login successful, redirecting...\' )));
    }

    die();
}
我的ajax-login-script.js 文件内容:

jQuery(document).ready(function($){

    // Perform AJAX login on form submit
    $(\'form#login_form\').on(\'#submit\', function(e){
        $(\'form#login_form p.status\').show().text(ajax_login_object.loadingmessage);
        $.ajax({
            type: \'POST\',
            dataType: \'json\',
            url: ajax_login_object.ajaxurl,
            data: { 
                \'action\': \'ajaxlogin\', //calls wp_ajax_nopriv_ajaxlogin
                \'username\': $(\'form#login_form #username\').val(), 
                \'password\': $(\'form#login_form #password\').val(), 
                \'security\': $(\'form#login_form #security\').val() },
            success: function(data){
                $(\'form#login_form p.status\').text(data.message);
                if (data.loggedin == true){
                    document.location.href = ajax_login_object.redirecturl;
                }
            }
        });
        e.preventDefault();
    });
});
我对AJAX和JS都不熟悉,因此非常感谢您对这件事的任何解释!

1 个回复
最合适的回答,由SO网友:Designer 17 整理而成

多亏了“爱斯基摩人”,我才能够做到这一点,我想我可以为那些试图这么做的人分享一个答案!

ajax-login-script.js 我所要做的就是改变这个$(\'form#login_form\').on(\'#submit\', function(e) 对此。。。$(\'form#login_form\').on(\'submit\', function(e) 只需删除# 通话前submit.

希望这对别人有帮助!

结束

相关推荐

在AJAX中调用getText时不会进行转换

当在gettext调用(\\uu()、\\ u e()等)中加载内容时,当我在浏览器中正常呈现页面时,它们可以很好地进行翻译(PHP将内容传递给浏览器),但是当我进行AJAX调用时,gettext不会进行翻译。我想可能就是这个词,但当我在通常从服务器(而不是通过ajax)加载的内容中使用gettext调用时,它会进行翻译。我正在使用WPML,但我不认为这与它有任何关系?是否有什么特殊的事情需要我做,或者将load\\u plugin\\u textdomain函数调用添加到特定的操作挂钩?它现在已添加到“