Jump to content
Fórum Script Brasil
  • 0

O Que Há De Errado?


diogoleter
 Share

Question

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!

Edited by diogoleter
Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...