web-dev-qa-db-fra.com

Vérifiez si le nom d'utilisateur existe avec AJAX

J'ai créé un formulaire d'inscription personnalisé pour une installation WordPress MultiSite. Il permet l'enregistrement de nouveaux blogs et utilisateurs. Je veux vérifier avec ajax si un nom d'utilisateur donné est disponible. Voici ce que j'ai jusqu'à présent:

add_action( 'wp_footer', 'pb_ajax_add_js' );

function pb_ajax_add_js() {

// add script to the footer
wp_enqueue_script( 'pb_ajax',
    plugin_dir_url( __FILE__ ).'js/script.js',
    array('jquery'), BOJ_ARM_VERSION, true
);

//Get protocol of the current page.
$protocol = isset( $_SERVER["HTTPS"]) ? 'https://' : 'http://';

// Display the admin-ajax.php using the same protocol as the current page.
$params = array(
  'ajaxurl' => admin_url( 'admin-ajax.php', $protocol )
);
wp_localize_script( 'pb_ajax', 'pb_ajax', $params );
}

Traitement des demandes côté serveur:

// Ajax request handling.
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();
}

Et le script jQuery (note: dans cette version, la validation est après le clic sur le lien)

(function($) {
    $('.check-username').click(function(){
        var link = this;
        $(link).html('sprawdzanie...');
        // 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);

Le script n'est pas complet. Il doit vérifier si le nom d'utilisateur existe et renvoyer true ou false. Pouvez-vous m'aider s'il vous plaît?

2
Jacek Jagiełło

Le problème vient de votre sélecteur jQuery:

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

Obtiendra la valeur par défaut de l'élément d'entrée. Généralement, ce sera vide, car vous ne le définissez pas à l'avance. Vous devez utiliser:

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

Je remarque également que vous utilisez #site-addres-input, mais "adresse" a deux secondes à la fin. Je ne sais pas si cela vous cause également un problème ou non ...

1
EAMann

Vous pouvez utiliser cette fonction: username_exists pour vérifier si l’utilisateur existe. Comme ça:

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();
}

Veuillez lire le codex pour une utilisation correcte de cette fonction car vous devrez inclure un fichier.

0
Rutwick Gangurde