WordPress AJAX在注册时不工作

时间:2015-05-30 作者:life4learn

伙计们。我曾尝试用ajax构建wordpress简单的注册表单,但根本不起作用。这是我的代码,一个php和jQuery ajax。请告诉我我的代码有什么问题。

仅供参考,(1)“警报”不起作用,(2)数据没有输入到我的自定义表中,(3)我在“我的测试注册表”中添加了“e.preventDefault()”和“return false”。但当我重新加载浏览器时,它并没有避免重新加载表单。

// The .php function code

if (!defined(\'ABSPATH\')) { exit; }
add_action( \'wp_enqueue_scripts\', \'load_scripts\' );

// Load scripts
function load_scripts()
{
    // I called jquery.min.js and jquery validation from function.php, not from here

    wp_enqueue_script(\'test-reg\', get_template_directory_uri() . \'/js/my-test-reg.js\', array(\'jquery\'), \'1.0\', true ); 

    wp_localize_script( \'test-reg\', \'myAjax\', array(
        \'myUrl\' => admin_url(\'admin-ajax.php\')
        ) 
    );

    add_action( \'wp_ajax_nopriv_add_to_register\', \'to_register\' );
}

function to_register()
{
    $nonce = $_REQUEST[\'nonce\'];

    if ( empty( $_POST) || !wp_verify_nonce( $nonce, \'my-nonce\') )
    {
        die(\'Oopss...\');
    } else {
        global $wpdb;

        $firstName = sanitize_text_field( $_POST[\'firstName)\'] );
        $lastName  = sanitize_text_field( $_POST[\'lastName)\'] );
        $email     = sanitize_email( $_POST[\'email\'] );

        $custom_table = $wpdb->prefix . "my_custom_table";
        $the_email = $wpdb->get_row( "SELECT `email` FROM $table_name" );

        if ( $the_email == $email )
        {
            $res[\'type\'] = \'error\';
            $res[\'show\'] = \'<span> The e-mail you entered already exists</span>\';

            $res = json_encode($res);
            echo $res;

            die();
        } else {
            $entered = $wpdb->insert ($custom_table, 
                array(
                    \'firstName\' => $firstName, 
                    \'lastName\' => $lastName, 
                    \'email\' => $email
                ), 
                array(
                    \'%s\', 
                    \'%s\', 
                    \'%s\'
                ) 
            );
        }

        if ( $entered )
        {
            $res[\'type\'] = \'success\';
            $res[\'show\'] = \'<span> Hello, you\\\'re success! </span>\';

            $res = json_encode($res);
            echo $res;

            die();
        }
    }
}

function reg_form()
{
    $nonce = wp_create_nonce(\'nonce\');

    $out = \'<form id="test-register" method="post">\';
    $out = \'<div id="response"></div>\';
    $out = \'<input type="text" name="firstName" id="your-firstName" required>\';
    $out .= \'<input type="text" name="lastName" id="your-lastName" required>\';
    $out .= \'<input type="text" name="email" id="your-email" required>\';
    $out .= \'<input type="submit" id="submit-btn" value="Go">
            <input type="hidden" id="my-nonce" value="\'.$nonce.\'">\';
    $out = \'</form>\';

    return $out;
}


// Here is my code of \'my-test-reg.js\'
jQuery(document).ready(function($) {
    var formIsValid = $(\'#test-register\');

    formIsValid.validate();

    $(\'#test-register\').submit(function(e) {
        e.preventDefault();

        // Get the data
        var mydata = {
            action: \'add_to_register\',
            firstName: $(this).find(\'#your-firstName\').val();
            lastName: $(this).find(\'#your-lastName\').val();
            email: $(this).find(\'#your-email\').val();
        };

        // Call the ajax
        $.ajax({
            type: \'post\',
            dataType: \'json\',
            url: myAjax.myUrl,
            data: mydata,
            success: function ( response )
            {
                if ( response.type == \'success\' )
                {
                    alert( \'Congrat, you are success!\' ); // Doesn\'t work
                    $( \'#response\' ).html();  // Doesn\'t work
                } else {
                    alert( \'Not Success!\' );  // Doesn\'t work
                    $( \'#response\' ).html();  // Doesn\'t work
                }
            }
        });

        return false;
    });
});
希望有人能帮助我。

顺致敬意,

1 个回复
SO网友:Domain

移动此操作“add\\u action”(“wp\\u ajax\\u nopriv\\u add\\u to\\u register”,“to\\u register”);”来自load\\u scripts function()。

// Load scripts
function load_scripts()
{
    // I called jquery.min.js and jquery validation from function.php, not from here

    wp_enqueue_script(\'test-reg\', get_template_directory_uri() . \'/js/my-test-reg.js\', array(\'jquery\'), \'1.0\', true ); 

    wp_localize_script( \'test-reg\', \'myAjax\', array(
        \'myUrl\' => admin_url(\'admin-ajax.php\')
        ) 
    );


}
add_action( \'wp_ajax_nopriv_add_to_register\', \'to_register\' );
将reg\\u form()函数替换为以下内容:-

function reg_form()
{
    $nonce = wp_create_nonce(\'nonce\');

$out = \'<form id="test-register" method="post">\';
$out .= \'<div id="response"></div>\';
$out .= \'<input type="text" name="firstName" id="your-firstName" required>\';
$out .= \'<input type="text" name="lastName" id="your-lastName" required>\';
$out .= \'<input type="text" name="email" id="your-email" required>\';
$out .= \'<input type="submit" id="submit-btn" value="Go">
        <input type="hidden" id="my-nonce" value="\'.$nonce.\'">\';
$out .= \'</form>\';

return $out;
}
您尚未连接$out变量。

结束

相关推荐

JQuery(选择器)与$(选择器)

为什么在wp admin/js/updates中会出现这种情况。js(在Wordpress 4.2中)$(selector) 已使用,但在wp admin/incldes/file中。phpjQuery(selector) 是否已使用?这有什么特别的原因吗?还是仅仅是开发团队的疏忽?