1

我在注册之前创建了用于检查用户名的脚本,但它不起作用。它返回错误。它是functions.php中的脚本:

function check_user_login_init(){

    /* Подключаем скрипт для проверки */
    wp_register_script('ajax-login-script', get_template_directory_uri() . '/js/ajax-login-script.js', array('jquery') ); 
    wp_enqueue_script('ajax-login-script');

    /* Локализуем параметры скрипта */
    wp_localize_script( 'ajax-login-script', 'ajax_check_login_object', array( 
      'ajaxurl' => admin_url( 'admin-ajax.php' ),
      'loadingmessage' => __('Verified data, wait a second...')
    ));

    // Разрешаем запускать функцию check_user_login() пользователям без привелегий
    add_action( 'wp_ajax_nopriv_check_user_login', 'check_user_login' );    
  }

    if (!is_user_logged_in()) {
        add_action('init', 'check_user_login_init');
    }

    function check_user_login(){

        // Первым делом проверяем параметр безопасности
        check_ajax_referer( 'ajax-login-nonce', 'security' );

        // Получаем данные из поля #user_login формы и проверяем их
        $username = $_REQUEST['username'];

        $sanitized_user_name = sanitize_user( $username, 1 );
        if ( username_exists( $sanitized_user_name )) {
                 echo json_encode(array('avaliblename'=>false, 'message'=>__('Choose another name!')));
            } else {
                 echo json_encode(array('avaliblename'=>false, 'message'=>__('OK!')));
            }

        die();
        exit;
    }

这是JS:

jQuery(document).ready(function($) {
    $('.register_box #registration #user_login').on('keyup', function(e){

            $.ajax({
                beforeSend: function(){
                    $('.register_box .status_registration').show().text(ajax_login_object.loadingmessage);
                },
                type: 'POST',
                dataType: 'json',
                url: ajax_check_login_object.ajaxurl,
                cache: false,
                data: { 
                    'action': 'check_user_login', //calls wp_ajax_nopriv_checkuserlogin
                    'username': $('.register_box #user_login').val()       
                },
                dataFilter: function(){
                    $('.register_box .status_registration').html('Data processed...');
                },
                error:  function(){

                    $('.register_box .status_registration').html('Something wrong...');

                    },
                success: function(data){


                        $('.register_box .status_registration').html(data.message);
                }
        });
        e.preventDefault();
    });
});

当我尝试在谷歌浏览器中输入用户名时,它返回错误:

未捕获的类型错误:无法读取 null 的属性“消息”

你能帮忙吗?

4

1 回答 1

0

data.message由于未设置,这很可能是 JavaScript 错误。检查开发人员工具栏的网络选项卡以检查从服务器返回的内容。

旁注:在服务器端启用调试以从日志中了解正在发生的事情也没有什么坏处。这是我的做法wp-config.php

define('WP_DEBUG', true);
define('WP_DEBUG_DISPLAY', false); // Turn forced display OFF
define('WP_DEBUG_LOG',     true);  // Turn logging to wp-content/debug.log ON

然后在任何地方执行以下行会将其推送到wp-content/debug.log(您可以监控):

error_log('started processing with array:');
error_log(print_r($array, true));

最后,摆脱die();并保留该exit;声明。

于 2013-05-09T14:36:46.890 回答