Jump to content
Fórum Script Brasil
  • 0

Mais uma da série


Henderson

Question

ae galera..

montei uma parada aqui pra poder quando um cara preencher um formulário, verificar se o email que ele preencheu já tá cadastrado no bd..

eu não sei muito de ajax, então eu não sei se o código que to usando tá certo... já usei ele em outros scripts, só copiei e colei.. eu até compreendo o que ele faz, mas não SEI de verdade..

o problema é que no firefox funciona certinho, mas no internet explorer dá esse erro

Os dados necessários para concluir esta operação ainda não estão disponíveis.

aqui o código do ajax

function ajax() {
};
ajax.prototype.iniciar = function() {

    try{
        this.xmlhttp = new XMLHttpRequest();
    }catch(ee){
        try{
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }catch(E){
                this.xmlhttp = false;
            }
        }
    }
    return true;
}

ajax.prototype.ocupado = function() {
    estadoAtual = this.xmlhttp.readyState;
    return (estadoAtual && (estadoAtual < 4));
}

ajax.prototype.processa = function() {
    if (this.xmlhttp.readyState == 4 && this.xmlhttp.status == 200) {
        return true;
    }
}

ajax.prototype.enviar = function(url, metodo, modo) {
    if (!this.xmlhttp) {
        this.iniciar();
    }
    if (!this.ocupado()) {
        if(metodo == "GET") {
            this.xmlhttp.open("GET", url, modo);
            this.xmlhttp.send(null);
        } else {        
            this.xmlhttp.open("POST", url, modo);
            this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            this.xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
            this.xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
            this.xmlhttp.setRequestHeader("Pragma", "no-cache");
            this.xmlhttp.send(url);
        }    

        if (this.processa) {
            return unescape(this.xmlhttp.responseText.replace(/\+/g," "));
        }
    }
    return false;
}
aqui a função que verifica se o email tá cadastrado
function verificaCadastro(email) {
remoto  = new ajax();
existe = remoto.enviar("ajax/abrir.php" + "?email=" + email,"GET","");
    if (existe) {
    altClass("email","inputErro");
    altImagem("imgEmail","erro");
    altMsg("erroEmail","Email j&aacute; cadastrado");
    return true;
    } else {
    altClass("email","inputCerto");
    altImagem("imgEmail","certo");
    altMsg("erroEmail","");
    return false;
    }
}
a página abrir.php retorna só true ou false. alguém sab o que tá errado? qe qe eu faço? aah.. eu chamo a função assim
<input type="text" name="email" id="email" class="input" maxlength="50" onblur="verificaEmail(this.value);" />
a função verificaEmail é essa
function verificaEmail(email) {
cadastro = verificaCadastro(email);
    if (cadastro)
    return false;
    if (email == "") {
    altClass("email","inputErro");
    altImagem("imgEmail","erro");
    altMsg("erroEmail","Email em branco");
    return false;
    }
var er = new RegExp (/^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]*)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/);
    if (er.test(email)) {    
    altClass("email","inputCerto");
    altImagem("imgEmail","certo");
    altMsg("erroEmail","");
    } else {
    altClass("email","inputErro");
    altImagem("imgEmail","erro");
    altMsg("erroEmail","Email inv&aacute;lido");
    }
}

vlw!

Edited by Henderson
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

me responderam isso em outro tópico

Não olhei o script inteiro, mas tá faltando um onreadystatechange quando você abre a requisição. Ele verifica os ready states e executaria um callback quando estivesse tudo pronto. Creio que esse deva ser o problema. Isso é no seu ajax(), mais precisamente no enviar(). Você pode usar:

this.xmlhttp.onreadystatechange = processa

mas onde eu coloco isso?

Link to comment
Share on other sites

  • 0

Oi Henderson o/

O camarada que está te ajudando talvez esteja certo, mas antes de pensar onde colocar o onreadystatechange, veja se funciona apenas se mudar a condição do if no método enviar():

if (this.processa) {
            return unescape(this.xmlhttp.responseText.replace(/\+/g," "));
        }

Troque ali o this.processa para this.processa().

Já que funciona no FF, talvez o onreadystate não seja necessário.

Olha, eu vou ser bem sincero, não curti muito esse código ajax que pegou....Existem melhores... Eu começo a achar que os frameworks estão afetando a cabeça dos programadores, e tudo quanto é código vem com prototype incrementando a classe sem a menor necessidade.

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.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...