我在注册前创建了用于检查用户名的脚本,但它不起作用。它返回错误。 它是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();
});
});
当我尝试在Google Chrome中输入用户名时,会返回错误:
未捕获的TypeError:无法读取null
的属性“message”
你能帮忙吗?
答案 0 :(得分:0)
由于data.message
未设置,因此很可能是JavaScript错误。检查开发人员工具栏的“网络”选项卡,检查从服务器返回的内容。
旁注:对于服务器端的enable debugging来说,从日志中了解正在发生的事情也不会受到影响。这是我在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;
声明。