Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulol

[Resolvido] JQuery, retorno de funções

Recommended Posts

Boa noite!

Já venho visitando esse fórum faz um tempo e sei da grande quantidade de informação que posso encontrar, e quem sabe partilhar, por aqui.

Uma breve explicação, eu estou montando um projeto voltado para WEB para a minha conclusão de curso técnico. Sendo assim, eu estou tentando me iniciar na linguagem de Javascript, para conseguir montar páginas mais dinâmicas e armazenar experiência.

 

Na primeira parte do projeto eu estou fazendo o sistema de login, validação e cadastro do usuário.

Como o sistema vai ser um pouco complexo eu achei perda de tempo gerar um sistema de validação apenas para esse formulário de cadastro. Então eu dividi minhas validações em um arquivo - functions.js - onde existem várias validações variadas.

 

Quando for necessário validar, por exemplo, se o nome de usuário está disponível é só rodar a função validaUsername(user) e ela vai retornar se o valor é verdadeiro ou, caso seja falso, retornar o erro.

 

O problema é que existe uma função em AJAX dentro da minha função que não retorna um valor para eu retornar a função.

Com certeza é alguma coisa besta que estou fazendo, gostaria apenas de alguma dica ou solução sobre como consertar tanto esse quanto eventuais outros erros que podem acontecer nesse mesmo estilo.

 

Código da função:

function validaUsername(user)
{
url = root+"/valida/&func=vl";
   a = $.ajax(
   {
       type: 'POST',
       url: url,
       data:
       {
           name: user
       }
       ,
       success: function(data)
       {

           var content = $(data).find('#response').html();
           if(content == 1)
           {
			erro = "Usuário já existe.";
               return erro;
           }
           else if(content == 0)
           {
			return true;
           }
       }
       ,
       error: function()
       {
           alert("313 - Ajax Error");
       }
   }
   );

if(a == true) return true;
   else return a;
}

 

Código de uma "chamada":

$('#login').change(function(){
a = validaUsername(this.value);
if(a != true)
{
$("#login-error").html("<strong class='side-tip'>"+a+"</strong>");
}
else
{
$("#login-error").html("<strong class='side-tip-ok'>Ok</strong>");	
}
})

 

Estou aceitando de braços abertos tanto dicas quanto soluções, afinal estou me "enfiando" nessa linguagem agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu li sobre a função e até tentei aplicar, mas fiquei parado no mesmo problema. :(

Código:

function validaUsername(user)
{
  url = root+"/valida/&func=vl";
  var a = $.ajax(
   {
       type: 'POST',
       url: url,
       data:
       {
           name: user
       }
       ,
       error: function()
       {
           alert("313 - Ajax Error");
       }
   }
   );
 b = a.success(function(data)
 {

     var content = $(data).find('#response').html();
           if(content == 1)
           {
			b = "Usuário já existe.";
			return b;
           }
           else if(content == 0)
           {
			b = true;
			return b;
           }
 }
 );
 alert(B);

}

 

Eu não consigo passar o valor da função que eu realizo ao completar a função do ajax para a função pai de forma alguma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe acessar o console do navegador? O que acontece se utilizar console.log(a)? Debugue o seu código. Firebug é uma boa. ;)

 

Ps.: Como está utilizando JQuery, para validação uma boa seria este plugin: https://github.com/jzaefferer/jquery-validation, porém, como está querendo aprender, realmente criar o seu próprio é a melhor alternativa, neste caso, porque está separando em funções? Poderia criar um plugin para isto, e assim aprenderia ainda mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O console de erros não aponta nenhum erro, eu sempre dou debugs no código com alert e visualizo o console.

Ele só não me passa o valor da variável mesmo.

 

Como plugin você quer dizer criar uma função que enquadre todos os tipos de validação?

Eu estou criando uma função de validação para cada tipo de dado que eu receber no site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Yep, você pode criar metódos diferentes dentro de um plugin, assim deixando todo o código de validação reunido.

 

Lembrando, javascript é case-sensitive, B é diferente de b. você está dando alert em uma variavel inexistente.

 

Se tiver o firebug, no momento que o JQuery disparar a requisição Ajax, qual a resposta do servidor? Às vezes o erro pode está aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testando com b o alert recebeu: "[object Object]"

Ou seja, o erro não é de sintaxe e sim eu que não sei receber o valor da função dentro de b.

 

É até lógico esse erro, a variável dentro de b não vai sair para fora da função. Eu não quero o valor de b, quero o valor que a função dele retorna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

troque alert por console.dir( B ); e verifique no console do firebug, ou outra ferramenta que utilize.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é erro, ao usar console.dir você iria "imprimir" o objeto no console. Assim daria para ver os metódos que ele possui, e de que tipo de objeto se trata. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante, dessa eu não sabia. haha

btw ele retornou:

readyState	1
abort	function()
always	function()
complete  function()
done	function()
error	function()
fail	function()
getAllResponseHeaders	function()
getResponseHeader	function()
isRejected	function()
isResolved	function()
overrideMimeType	function()
pipe	function()
promise  function()
setRequestHeader	function()
statusCode	function()
success	function()
then	function()

 

@edit

 

Bom, consegui.

Só que tive que tirar o async (de AJAX passou pra JAX), mas caso contrário eu ficava tendo um atrasado na resposta da função.

 

function validaUsername(user)
{
  url = root+"/valida/&func=vl";
  var a = $.ajax(
   {
       type: 'POST',
       url: url,
	async:false,
       data:
       {
           name: user
       }
       ,
       error: function()
       {
           alert("313 - Ajax Error");
       }
   }
   );
 b = a.success(function(data)
 {

     var content = $(data).find('#response').html();
           if(content == 1)
           {
			c = false;
		}
           else if(content == 0)
           {
			c = true;

		}
 }
 );
   return c;
}

 

@JCMais

Obrigado por mostrar o debugador, vai ajudar bastante na próxima cagada que eu fizer.

Btw, vou pensar na chance de criar um plugin para validar todos os dados.

 

 

Acho que podem colocar como resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.