Verifică dacă un nume de utilizator există folosind AJAX

8 oct. 2012, 18:28:40
Vizualizări: 5.07K
Voturi: 2

Am creat un formular de înregistrare personalizat pentru o instalație WordPress MultiSite. Acesta permite înregistrarea de bloguri și utilizatori noi. Doresc să verific cu ajax dacă un anumit nume de utilizator este disponibil. Iată ce am realizat până acum:

add_action( 'wp_footer', 'pb_ajax_add_js' );

function pb_ajax_add_js() {

// adaugă scriptul în footer
wp_enqueue_script( 'pb_ajax',
    plugin_dir_url( __FILE__ ).'js/script.js',
    array('jquery'), BOJ_ARM_VERSION, true
);

// Obține protocolul paginii curente.
$protocol = isset( $_SERVER["HTTPS"]) ? 'https://' : 'http://';

// Afișează admin-ajax.php folosind același protocol ca pagina curentă.
$params = array(
  'ajaxurl' => admin_url( 'admin-ajax.php', $protocol )
);
wp_localize_script( 'pb_ajax', 'pb_ajax', $params );
}

Gestionarea cererii pe server:

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

Și scriptul jQuery (notă: în această versiune, validarea este după click pe link)

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

Scriptul nu este complet. Trebuie să verifice dacă numele de utilizator există și să returneze true sau false. Puteți să mă ajutați, vă rog?

0
Toate răspunsurile la întrebare 2
2

Problema este cu selectorul tău jQuery:

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

Va obține valoarea implicită a elementului input. De obicei, aceasta va fi goală, deoarece nu o setezi în prealabil. Trebuie să folosești:

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

De asemenea, observ că folosești #site-addres-input, dar "address" se scrie cu două s-uri la final. Nu sunt sigur dacă și asta îți cauzează probleme sau nu...

8 oct. 2012 18:34:35
Comentarii

Folosesc adresa site-ului ca nume de utilizator (noua adresă de blog este egală cu numele de utilizator). Dar asta nu schimbă nimic...

Jacek Jagiełło Jacek Jagiełło
8 oct. 2012 18:40:47

Alt lucru pe care va trebui să-l faci este să schimbi $.get în $.post pentru a trimite datele tale către WordPress. Dar în afară de modificările pe care le-am recomandat, nu putem recomanda altceva fără a vedea markup-ul HTML real pe care încerci să-l atingi.

EAMann EAMann
8 oct. 2012 18:59:29
1

Puteți folosi această funcție: username_exists pentru a verifica dacă utilizatorul există. Astfel:

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

Vă rugăm să citiți codex-ul pentru utilizarea corectă a acestei funcții, deoarece va trebui să includeți un fișier.

8 oct. 2012 18:35:21
Comentarii

Încă nu funcționează. Nu afișează nimic.

Jacek Jagiełło Jacek Jagiełło
8 oct. 2012 18:43:04