Проверка существования имени пользователя с помощью AJAX

8 окт. 2012 г., 18:28:40
Просмотры: 5.07K
Голосов: 2

Я создал пользовательскую форму регистрации для установки WordPress Multisite. Она позволяет регистрировать новые блоги и пользователей. Мне нужно проверить через AJAX, доступно ли указанное имя пользователя. Вот что у меня есть на данный момент:

add_action( 'wp_footer', 'pb_ajax_add_js' );

function pb_ajax_add_js() {

// Добавляем скрипт в подвал
wp_enqueue_script( 'pb_ajax',
    plugin_dir_url( __FILE__ ).'js/script.js',
    array('jquery'), BOJ_ARM_VERSION, true
);

// Получаем протокол текущей страницы
$protocol = isset( $_SERVER["HTTPS"]) ? 'https://' : 'http://';

// Отображаем admin-ajax.php с тем же протоколом, что и текущая страница
$params = array(
  'ajaxurl' => admin_url( 'admin-ajax.php', $protocol )
);
wp_localize_script( 'pb_ajax', 'pb_ajax', $params );
}

Обработка запроса на стороне сервера:

// Обработка AJAX запроса
add_action('wp_ajax_nopriv_boj_arm_ajax', 'pb_check_username');
add_action('wp_ajax_boj_arm_ajax', 'pb_check_username');

function pb_check_username() {
$username = $_REQUEST['usr'];
echo $username;

die();
}

И jQuery скрипт (примечание: в этой версии проверка происходит после клика по ссылке)

(function($) {
    $('.check-username').click(function(){
        var link = this;
        $(link).html('проверка...');
        // href="' . get_permalink() . "#more-{$post->ID}"
        var usr = $("#site-addres-input").attr('value');

        var data = {
            action: 'boj_arm_ajax',
            usr: usr
        };

        $.get(boj_arm.ajaxurl, data, function(data){
            $(link).after(data).remove();
        });
        return false;
    });
})(jQuery);

Скрипт не завершен. Он должен проверять, существует ли имя пользователя, и возвращать true или false. Можете ли вы помочь, пожалуйста?

0
Все ответы на вопрос 2
2

Проблема в вашем jQuery селекторе:

var usr = $("#site-addres-input").attr('value');

Этот код получит значение по умолчанию для input элемента. Обычно оно будет пустым, так как вы не устанавливаете его заранее. Вам нужно использовать:

var usr = $("#site-addres-input").val();

Я также заметил, что вы используете #site-addres-input, но слово "address" пишется с двумя s в конце. Не уверен, является ли это также причиной проблемы...

8 окт. 2012 г. 18:34:35
Комментарии

Я использую адрес сайта в качестве имени пользователя (новый адрес блога соответствует имени пользователя). Но это ничего не меняет...

Jacek Jagiełło Jacek Jagiełło
8 окт. 2012 г. 18:40:47

Еще одна вещь, которую вам нужно сделать - изменить $.get на $.post для отправки данных в WordPress. Помимо рекомендованных изменений, мы не можем предложить ничего другого без просмотра фактической HTML-разметки, с которой вы пытаетесь работать.

EAMann EAMann
8 окт. 2012 г. 18:59:29
1

Вы можете использовать функцию: username_exists для проверки существования пользователя. Пример использования:

add_action('wp_ajax_nopriv_boj_arm_ajax', 'pb_check_username');
add_action('wp_ajax_boj_arm_ajax', 'pb_check_username');

function pb_check_username() {
    $username = $_REQUEST['usr'];
    if(username_exists($username))
        echo 1;
    else
        echo 0;
    die();
}

Пожалуйста, ознакомьтесь с кодексом для правильного использования этой функции, так как вам потребуется подключить файл.

8 окт. 2012 г. 18:35:21
Комментарии

Все еще не работает. Ничего не выводится.

Jacek Jagiełło Jacek Jagiełło
8 окт. 2012 г. 18:43:04