Cum pot verifica dacă un email există folosind keyup() în jQuery?

17 oct. 2012, 14:17:29
Vizualizări: 17.9K
Voturi: 1

Am configurat o funcție jQuery keyup cu întârziere pentru a verifica email-ul introdus într-un câmp de input.

Funcționează corect după testare cu un alert('Tasta apăsată!');

Dar vreau să afișeze, de exemplu, 'Da, acest email este asociat cu un utilizator' SAU 'Ne pare rău, acest email nu este în baza noastră de date' fără a trimite nicio cerere către server.


    var delay = (function(){
        var timer = 0;
        return function(callback, ms){
            clearTimeout (timer);
            timer = setTimeout(callback, ms);
        };
    })();
    $('input').keyup(function() {
        delay(function(){
            // verifică dacă emailul există și afișează rezultatul
            // Pot folosi PHP aici?
            // Ajută ajax/json?
        }, 500 );
    });

Am încercat să verific cu PHP dar acesta este executat înaintea jQuery, unde stochez variabila de email.

După câteva căutări pe Google, se pare că acest lucru nu este posibil. Poate cineva să confirme sau să ofere o soluție?

Mulțumesc

3
Comentarii

Deoarece evenimentul keyup este declanșat de fiecare dată când o tastă este eliberată, aș recomanda utilizarea evenimentului blur care se declanșează doar când utilizatorul trece la următorul câmp. Ar trebui să poți atașa evenimentul la un apel ajax care va verifica existența adresei de email.

nvwd nvwd
17 oct. 2012 14:36:46

Aceasta nu este specifică WordPress.

Joseph Leedy Joseph Leedy
17 oct. 2012 15:13:22

Poate nu strict, dar am avut intenția inițială de a folosi <?php if ( email_exists($email) ) { . . . } ?> care este specific WordPress. Deci, presupun că ai putea generaliza întrebarea mea ca: pot folosi jquery/json/ajax cu if ( email_exists($email).

zilj zilj
17 oct. 2012 15:52:14
Toate răspunsurile la întrebare 1
6

Aș folosi o cerere AJAX către un script PHP care face verificarea, care ar putea arăta cam așa în partea de jQuery după ce documentul este gata:

// jQuery
$('#email-input').live('change', function() {
    // cerere AJAX
    $.ajax({
        url: "email_check.php",
        data: {
            'email' : $('#email-input').val()
        },
        dataType: 'json',
        success: function(data) {
            if(data.result) {
                alert('Emailul există!');
            }
            else {
                alert('Emailul nu există!');
            }
        },
        error: function(data){
            // eroare
        }
    });
});

Cu exemplul de mai sus, PHP-ul tău ar trebui să returneze date în format JSON după ce verifică adresa de email. De exemplu, fișierul tău email_check.php ar putea conține:

// preia email trimis prin AJAX
$email = $_GET['email'];

// efectuează verificarea
if ( email_exists($email) ) {
    $response->result = true;
}
else {
    $response->result = false;
}

// returnează răspunsul JSON
echo json_encode($response);

Sper că te ajută!

17 oct. 2012 14:34:24
Comentarii

Ajungeam la concluzia că trebuie să folosesc Ajax, iar aceasta pare o soluție bună. O să încerc să implementez acum.

zilj zilj
17 oct. 2012 15:55:00

Scuze, sunt mai novice în Ajax. Ar trebui ca jQuery să fie în interiorul funcției mele keyup? Am adăugat o verificare simplă dacă emailul există, în email_check.php returnând fie true fie false. Nu e corect, nu-i așa? if ($email) {$response->result = true;} else {$response->result = false;}

zilj zilj
17 oct. 2012 16:14:23

Scuze, am rezolvat problema datorită codului tău. Am uitat că url: trebuia să includă calea către tema.

zilj zilj
17 oct. 2012 16:23:42

La naiba. Din păcate, în fișierul meu email_check.php am încercat să rulez if ( email_exists($email) ) și apoi să returnez valoarea true sau false. Acest lucru provoacă o eroare de server și nu reușesc să-l fac să funcționeze. L-am testat în pagina originală și funcționează. De ce nu funcționează în pagina țintă PHP?

zilj zilj
17 oct. 2012 17:09:07

Referitor la întrebările tale despre unde să-l folosești, folosește-l pur și simplu în document ready, nu este nevoie să-l pui în funcția ta keyup, această funcție pe care am scris-o face exact asta (practic la schimbare).

Cât despre eroarea de server pe care o primești pe pagina PHP, poți oferi un link? Poți arăta codul din funcția email_exists?

Mateusz Michalik Mateusz Michalik
18 oct. 2012 04:48:22

S-a dovedit că nu funcționa pentru că nu era complet integrat cu WP. Am primit sfaturi suplimentare să folosesc wp_ajax și să creez cod în functions.php. http://wordpress.stackexchange.com/questions/69572/using-email-exists-wp-function-in-an-ajax-request

zilj zilj
18 oct. 2012 11:44:51
Arată celelalte 1 comentarii