Ir para conteúdo
Fórum Script Brasil
  • 0

O Que Há De Errado?


diogoleter

Pergunta

Oi,

Tenho este código em ajax:

function validar(){

var usuario=document.frm.usuario.value;
var senha1=document.frm.pas1.value;

// Valida existência de usuário

if (usuario==""){
alert("Especifique um nome de usuário!");
document.frm.usuario.focus(); 
return false;
}

if (usuario.length<5){
alert("O nome de usuário deve conter no minímo 5 caracteres!");
document.frm.usuario.focus(); 
return false;
}

//Verifica existência de usuário

var resultado=false;
var xmlhttp=false;

try{
    xmlhttp=new ActiveXObject("Msxml12.XMLHTTP");
} catch (e) {
 try{
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    } catch(E){
        xmlhttp=false;
    }
}
if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
    xmlhttp=new XMLHttpRequest();
}

serverPage="users/verifyuser.php?ref="+usuario;
xmlhttp.open("GET", serverPage);
xmlhttp.onreadystatechange=function(){
    if(xmlhttp.readyState==4){
        resultado=xmlhttp.responseText;
    }
}

xmlhttp.send(null);

if(resultado==1){
alert("Este nome de usuário já existe");
document.frm.usuario.focus(); 
return false;    
}

//Finaliza verificação de existência de usuário

if (senha1==""){
alert("Especifique uma senha!");
document.frm.pas1.focus(); 
return false;
}

Quando submeto formulário de chamada desta função pela primeira vez, o alerta de senha aparece primeiro, e na segunda tentativa aparece o de usuário? sendo que o correto é o de usuário aparecesse primeiro...

Obrigado!

Editado por diogoleter
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

diogoleter,

ta certo, o codigo do jeito que você criou vai funcionar sempre desta forma.

o erro esta na sua implementacao.

o que acontece, é que o ajax faz a solicitacao e continua executando o resto do codigo,

ele não para pra ficar esperando o valor de "resultado" para depois ir pro if.

por isso ele passa batido pelo seu primeiro if, porque resultado ainda não possui o valor retornado da sua execucao em ajax.

tu pode colocar esses 2 ifs dentro do if(xmlhttp.readyState==4){ logo abaixo do resultado=xmlhttp.responseText;

tenta ai,

t+

Link para o comentário
Compartilhar em outros sites

  • 0
diogoleter,

ta certo, o codigo do jeito que você criou vai funcionar sempre desta forma.

o erro esta na sua implementacao.

o que acontece, é que o ajax faz a solicitacao e continua executando o resto do codigo,

ele não para pra ficar esperando o valor de "resultado" para depois ir pro if.

por isso ele passa batido pelo seu primeiro if, porque resultado ainda não possui o valor retornado da sua execucao em ajax.

tu pode colocar esses 2 ifs dentro do if(xmlhttp.readyState==4){ logo abaixo do resultado=xmlhttp.responseText;

tenta ai,

t+

Obrigado pela ajuda, realmente é isto, mas porém ao submeter o formulário o alert aparece mas não impede que o formulário seja submetido.... mas os ifs corresponderam bem ao que preciso, só tem este porém...

Link para o comentário
Compartilhar em outros sites

  • 0
hum,

o codigo que esta postado parece ok quanto a esse problema,

tem que ver como você esta chamando a funcao.

deveria ser algo assim:

<form name="frm" method="post" action="pagina.html" onsubmit="return validar();">

t+

A chamada esta certa... vou revisar novamente meu código pra onde pode estar o problema... se tu diz que ta certo então deve estar errado em outro ponto da implementação... assim que achar o problema postarei a solução!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...