Come verificare l'esistenza di un'email via jQuery keyup()?

17 ott 2012, 14:17:29
Visualizzazioni: 17.9K
Voti: 1

Ho configurato una funzione jQuery keyup con delay per verificare l'email inserita in un campo di input.

Funziona correttamente dopo aver testato con un alert('Tasto premuto!');

Ma vorrei che mostrasse, ad esempio, "Sì, questa email è associata a un utente" OPPURE "Spiacenti, questa email non è nel nostro database" senza inviare alcuna richiesta di pagina.


    var delay = (function(){
        var timer = 0;
        return function(callback, ms){
            clearTimeout (timer);
            timer = setTimeout(callback, ms);
        };
    })();
    $('input').keyup(function() {
        delay(function(){
            // verifica se l'email esiste e mostra il risultato
            // Posso usare PHP qui?
            // Ajax/json può aiutare?
        }, 500 );
    });

Ho provato a verificare con PHP ma questo viene renderizzato prima del jQuery, ovviamente, ed è qui che memorizzo la mia variabile email.

Dopo alcune ricerche su Google sembra che questo potrebbe non essere possibile. Qualcuno può confermare o offrire una soluzione?

Grazie

3
Commenti

Poiché l'evento keyup viene attivato ogni volta che un tasto della tastiera viene rilasciato, consiglierei di utilizzare l'evento blur che si attiva solo quando l'utente passa al campo successivo. Dovresti essere in grado di collegare l'evento a una chiamata ajax che verificherà l'esistenza dell'indirizzo email.

nvwd nvwd
17 ott 2012 14:36:46

Questo non è specifico di WordPress.

Joseph Leedy Joseph Leedy
17 ott 2012 15:13:22

Forse non strettamente, ma avevo originariamente l'intenzione di usare <?php if ( email_exists($email) ) { . . . } ?> che è specifico di WordPress. Quindi suppongo che potresti generalizzare la mia domanda come: posso usare jquery/json/ajax con if ( email_exists($email).

zilj zilj
17 ott 2012 15:52:14
Tutte le risposte alla domanda 1
6

Userei una richiesta AJAX a uno script PHP che esegue la verifica, che potrebbe essere simile a questa sul lato jQuery dopo il document ready:

// jquery
$('#email-input').live('change', function() {
    //richiesta ajax
    $.ajax({
        url: "email_check.php",
        data: {
            'email' : $('#email-input').val()
        },
        dataType: 'json',
        success: function(data) {
            if(data.result) {
                alert('Email esistente!');
            }
            else {
                alert('Email non esistente!');
            }
        },
        error: function(data){
            //errore
        }
    });
});

Con l'esempio sopra, il tuo PHP dovrebbe restituire dati json una volta completata la verifica dell'email basata sull'indirizzo, ad esempio il tuo email_check.php conterrebbe:

// ottieni email passata via AJAX
$email = $_GET['email'];

// esegui verifica
if ( email_exists($email) ) {
    $response->result = true;
}
else {
    $response->result = false;
}

// restituisci json
echo json_encode($response);

Spero che sia utile!

17 ott 2012 14:34:24
Commenti

Stavo arrivando alla conclusione che avevo bisogno di usare ajax, questa sembra una buona soluzione. Ora proverò a implementarla.

zilj zilj
17 ott 2012 15:55:00

Scusa, sono un po' un principiante con ajax. Il codice jQuery dovrebbe essere all'interno della mia funzione keyup? Ho aggiunto un controllo sull'esistenza dell'email come semplice test, al mio email_check.php che restituisce vero o falso. Non è corretto, vero? if ($email) {$response->result = true;} else {$response->result = false;}

zilj zilj
17 ott 2012 16:14:23

Scusa, ora ho risolto grazie al tuo codice. Avevo dimenticato che il url: doveva considerare l'URL del tema.

zilj zilj
17 ott 2012 16:23:42

Accidenti. Purtroppo, all'interno del mio email_check.php volevo eseguire if ( email_exists($email) ) e poi restituire il valore true o false. Sta causando un errore del server e non riesco a farlo funzionare. L'ho testato nella pagina originale e funziona. Perché non nella pagina php di destinazione?

zilj zilj
17 ott 2012 17:09:07

Riguardo alle tue domande su dove usarlo, usalo semplicemente dentro document ready, non c'è bisogno di metterlo nella tua funzione keyup, questa funzione che ho scritto fa proprio quello (in pratica al cambio).

Per quanto riguarda l'errore del server che stai ricevendo nella pagina PHP puoi fornire un link? Puoi mostrare il codice all'interno della funzione email_exists?

Mateusz Michalik Mateusz Michalik
18 ott 2012 04:48:22

Alla fine non funzionava perché non era completamente collegato a WP. Mi è stato consigliato di usare wp_ajax e creare il codice in functions.php. http://wordpress.stackexchange.com/questions/69572/using-email-exists-wp-function-in-an-ajax-request

zilj zilj
18 ott 2012 11:44:51
Mostra i restanti 1 commenti