$.post() do jQuery

Seguinte pessoal…

tá me tirando um tempo já isso, mas enfim estou usando a função $.post() do jQuery pra fazer uma requisição sem reload na pagina pra saber,
se o valor que estiver no campo já está cadastrado no banco de dados.

no foi criado o seguinte método.

[code]$.validator.addMethod(“verificaLogin”, function(value){//adiciona o método chamado verificaLogin
var nome_post = value; //insere na variavel nome_post o que está no campo em que defini que terá esse método
$.post(“verificarLogin.php”, {name: nome_post}, function(data){ //no verificaLogin.php, ele retorna uma string no data “true” ou “false” usando o echo
if(data == “true”){
return true; // esse RETURN seria pro método verificaLogin, mas não funciona…
} else {
return false;// esse RETURN seria pro método verificaLogin, mas não funciona…também.
}
}

}
[/code]

após não conseguir com isso tentei assim:

[code]$.validator.addMethod(“verificaLogin”, function(value){//adiciona o método chamado verificaLogin
var nome_post = value; //insere na variavel nome_post o que está no campo em que defini que terá esse método

var retorno; // para passar o return fora do if

$.post("verificarLogin.php", {name: nome_post}, function(data){ //no verificaLogin.php, ele retorna uma string no data "true" ou "false" usando o echo
    if(data == "true"){
        retorno =  true; 
    } else {
        retorno =  false;
       }
}

return retorno; // e também não funciona.... What is that??!!! 

}
[/code]

e também ao invés de:

utilizei somente:

Alguém saberia me auxiliar?

att
Mauricio N. Ferreira
[],s

O seu problema eh que $.post eh assincrono.

Logo o callback so sera chamado apos o post.

Para fazer o que vc deseja tem algumas tecnicas. por exemplo crie uma variavel global “login_valido” que comeca falso e so sera verdadeiro apos o callback do $.post

<script type="text/javascript">

loginValido = false;

$.validator.addMethod("verificaLogin", function(value) {
		var nome_post = value;
		$.post("verificaLogin.php",{name: nome_post},function(data){
			if(data == "true"){
				//alert("o campo "+ value + "está disponivel: "+data);
				loginValido =  true;
				
			} else {
				//alert("o campo "+ value + " não está disponivel: "+data);
				loginValido =  false;				
			}	
		});
		//alert(varToVerificaLogin);
	return loginValido;	
});	

Estava fazendo isso, mas aí surgiu o seguinte problema, ao executar o método verificaLogin, ele executa a linha 06, 18 e depois retorna para a 07.

parece brincadeira, mas coloquei alert em tudo pra testar… e foi o que aconteceu, ou seja.

se eu colocar um login válido na primeira digitação, irá retornar false, ao invez de true, se eu tiro o foco do campo, retorno nele, e tiro de novo.

ele atualiza corretamente, mas não gostaria de criar uma “gambiarra” pra tirar o foco coloca e tirar de novo.

Qual seria a sugestão?

Obrigadao.

att
Mauricio N. Ferreira
[],s

desculpe esse UP, mas passaram-se 2 dias já e não sei o que fazer.

Você não está entendendo como chamadas assíncronas funcionam.

Numa chamada síncrona você pode pedir por algo, e esperar um retorno dele ao finalizar.
Num chamada assíncrona, você pede alguma coisa, deixa com ele um callback(literalmente “chamada de volta” ou “avise-me”) e vai embora sem qualquer retorno. Quando ele executar a requsição, e obter um retorno, a ele então executará a ação que você deixou como callback.

function executarAlgumaAcao(data)
{
   if (data == "true")
     alert("Sucesso");
   else
     alert("Fracasso");
}

$.validator.addMethod("verificaLogin", function(value) {
		var nome_post = value;
		$.post("verificaLogin.php",{name: nome_post},function(data){
			executarAlgumaAcao(data);
		});
});	

Galera eu fiz da seguinte forma:

function verificarHomonimos(idCargo, nome) { retorno = true; jQuery.ajax({ type: "GET", url: "/existe_homonimo.htm", async : false, data : {"id":idCargo, "nome": nome}, success : function (dados) { if(dados == "false") { retorno = false; } else { retorno = true; } } });

return retorno;
}

Qualquer duvida encontrei aqui a solução:
http://wbruno.com.br/2012/01/23/exemplo-de-uso-jquery-deferred-simples/