Q:

Função Javascript retornando Undefined

Estou com um problema com uma função JavaScript. Eu preciso verificar a existência de um item no banco de dados e por isso uso uma função js com ajax chamada verificaExistente. O php me retorna um Json e nessa função eu verifico se existem elementos naquele retorno.
O retorno do banco está acontecendo como previsto, o problema é o return. Quando chamo essa função dentro do onclick do botão salvar, o valor retornado é undefined. Alguém já teve algum erro parecido? Agradeço a ajuda.
Abaixo o código:
$( "#btnSalvar" ).on( 'click', function(){            
    if( $( "#frmDados" ).valid() !== false ){
        if(verificaExistente()) salvar();
        else alert("Dados já existentes");            
    }
});

function verificaExistente(){        
    $.ajax({
        url: "verificaItem.php",
        type: 'POST',
        dataType: 'json',
        cache: false,
        data:{ 
            id_tabela          : $("#id_tabela").val(),
            id_revestimento    : $("#id_revestimento").val(),
            operador           : 'AND'
        },
        error: function(){
            alert('Erro ao Tentar ação.');
        },
        success: function( retorno ){ 
            if(retorno.dados.length > 0) return false;
            return true;
        }
    });
}

A:

O que está acontecendo é que você está pegando o retorno da função verificaExistente e, como ela não retorna nada, o resultado é undefined. O que está retornando true/false é a função associada ao success do ajax e não a verificaExistente. Entretanto, a função de click não recebe o retorno da success, mas sim da função verificaExistente, que, como foi explicado anteriormente, sempre retornará undefined.
O correto seria você verificar se existe e só depois chamar uma função de retorno, como no exemplo a seguir:
$( "#btnSalvar" ).on( 'click', function(){            
    if( $( "#frmDados" ).valid() !== false ){
        verificaExistente()
    }
});

function verificaExistente(){        
    $.ajax({
        url: "verificaItem.php",
        type: 'POST',
        dataType: 'json',
        cache: false,
        data:{ 
            id_tabela          : $("#id_tabela").val(),
            id_revestimento    : $("#id_revestimento").val(),
            operador           : 'AND'
        },
        error: function(){
            alert('Erro ao Tentar ação.');
        },
        success: function( retorno ){ 
            if(retorno.dados.length > 0) alert("Dados já existentes");
            else salvar();                
        }
    });
}

Entretanto, o fluxo correto seria fazer essa verificação no lado do servidor apenas, usando PHP ou a tecnologia que você está usando para fazer essa validação e apenas retornar um erro, caso os dados já existam ou uma mensagem de sucesso através do ajax.

