Come verificare l'esistenza di un'email via jQuery keyup()?
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
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!

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

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

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

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?

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?

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
