si, data mi ritorna dal server ma perché è concettualmente sbagliato come dici? io con lo stesso codice faccio il controllo sue due campi diversi (due piccioni con una fava) e mi serve distinguere se il data è riferito ad email o a username in modo da settare a true la variabile giusta e non capisco come fare altrimenti a controllare tutti i campi senza usare le variabili globali

questo è il codice per intero

codice:
var email = false;
var username = false;
var password = false;
var cpassword = false;
    
$(document).ready(function() {
    /* disabilita il pulsante per l'invio del form */
    $('input[value=register]').attr({
        disabled: 'disabled'
    });
    
    /* controllo il campo username o email */
    $('input[type=text]').blur(function() {
        var error = false;
        var name = $(this).attr('name');
        var value = $(this).val();
        
        /* controllo formato email */
        if (name == 'email') {
            var pattern = /^[a-z0-9._-]+@[a-z0-9.-]+\.[a-z0-9]{2,4}$/;
            if (!pattern.test(value)) {
                error = true;
                showErrorMessage('email non valida', 'email')
            }
        }
        /* controllo formato username */
        if (name == 'username') {
            pattern = /^[a-z0-9]{6,10}$/;
            if (!pattern.test(value)) {
                error = true;
                showErrorMessage('username non valido', 'username');
            }
        }
        /* controllo univocità campo */
        if (!error) {
            $.ajax({
                type: 'post',
                url: 'dispatcher.php',
                data: 'action=check&field=' + name + '&value=' + value,
                success: function(data) {
                    switch (name) {
                        case 'email':
                            if (data == 'ok') {
                                email = true;
                            }else {
                                showErrorMessage('email');
                            }
                            break;
                        case 'username':
                            if (data == 'ok') {
                                username = true;
                            }else {
                                showErrorMessage('username');
                            }
                            break;
                    }
                }
            });
        }
    });
    
    /* controllo i campi password */
    $('input[type=password]').blur(function() {
        var name = $(this).attr('name');
        var value = $(this).val();
        
        if (name == 'password') {
            if (value != undefined && value.length > 0) {
                password = true;
            } else {
                showErrorMessage('password non valida', 'password');
            }
        }
        if (name == 'cpassword') {
            if (value != undefined && value.length > 0) {
                var pwd = $('input[name=password]').val();
                
                if (value == pwd) {
                    cpassword = true;
                } else {
                    showErrorMessage('le password non corrispondono', 'cpassword');
                }
            } else {
                showErrorMessage('password non valida', 'cpassword');
            }
        }
    });
    
    /* nascondo gli eventuali messaggi di errori per i campi validi */
    if (email) {
        hideErrorMessage('email');
    }
    if (username) {
        hideErrorMessage('username');
    }
    if (password) {
        hideErrorMessage('password');
    }
    if (cpassword) {
        hideErrorMessage('cpassword');
    }
    
    /* se i dati nei campi sono corretti riabilito il pulsante di invio */
    if (email && username && password && cpassword) {
        $('input[value=register]').removeAttr('disabled');
    }
    
    /* DEBUG: stampa valori */
    $('div#status > span#email').html(email ? 'true' : 'false');
    $('div#status > span#username').html(username ? 'true' : 'false');
    $('div#status > span#password').html(password ? 'true' : 'false');
    $('div#status > span#cpassword').html(cpassword ? 'true' : 'false');
});

function showErrorMessage(message, target) {
    $('span.error#' + target).html(message).css({
        display: 'inline'
    });
}

function hideErrorMessage(target) {
    $('span.error#' + target).css({
        display: 'none'
    });
}
ho sostituito l'if con uno switch ma concettualmente non cambia nulla