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

(Resolvido) Problema com requisição ajax


vini_loock

Pergunta

Olá, estou tendo um problema com requisições ajax, está difícil encontrar o erro, já tentei olhando no debug do chrome e no firebug, mas não retorna erro algum.

Era pra me exibir dois alerts,:

alert 1: "state: 1"

alert 2: "state: 4"

Mas só mostra o primeiro.

A função Ajax:

function Ajax(opt, val){

    this.url = '';
    this.method = 'GET';
    this.params = '';
    this.req = null;
    
    if(typeof opt == 'object'){
        for(i in opt){
            this[i] = opt[i];
        }
    }else{
        this[opt] = val;
    }
    
    this.url = this.url == 'GET' && this.params != '' ? this.url+'?'+this.params : this.url;
    
    this.req = new XMLHttpRequest();
    
    this.req.open(this.method, this.url, true);
    
    this.req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    this.req.setRequestHeader('charset', 'UTF-8');
    
    this.onreadystatechange = this.state();
    
    this.req.send(this.params);
    
}

Ajax.prototype.state = function(){
    
    if(this.req.readyState == 1){
        alert('state: 1');
    }else if(this.req.readyState == 4){
        alert('state: 4');
    }
    
}
E o arquivo que chama:
<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8" />
        <title></title>
        &lt;script type="text/javascript" src="js/Ajax.class.js"></script>
        &lt;script type="text/javascript">
            window.onload = function(){
                var a = new Ajax({
                    method: 'POST',
                    url : 'ajax.request.php',
                    params: 'option=component'
                });
            }
        </script>
    </head>
    <body></body>
</html>

Já dei uma olhada em várias classes para tentar identificar meu erro, mas nenhuma que achei até agora trabalha dessa mesma forma, então fica um pouco difícil.

Provavelmente é um erro tolo, mas não consigo achar de forma alguma.

Se alguém puder dar esse help, ficarei muito feliz xD

Vlw...

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

2 respostass a esta questão

Posts Recomendados

  • 0

O erro pode não estar no código.

Ao invés de

Ajax.prototype.state = function(){
    
    if(this.req.readyState == 1){
        alert('state: 1');
    }else if(this.req.readyState == 4){
        alert('state: 4');
    }
    
}
Deixe
Ajax.prototype.state = function(){    
    alert(this.req.readyState);    
}

Pra ver quais states estão sendo chamados.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não cheguei a testar isso que você propos porque to sem um servidor instalado aqui, porem, fiz se não me engano sexta-feira uma requisição mais simples, tudo em um método mesmo, funciona normal por enquanto, não cheguei a fazer testes, apenas o básico.

Nojim.prototype.ajax = function(param, value){
    
    // váriaves privadas
    this.url = '';
    this.method = 'GET';
    this.params = null;
    this.header = {'Content-type': 'application/x-www-form-urlencoded', charset: 'UTF-8'};
    
    try{
        var obj = new XMLHttpRequest();
    }catch(e){
        try{
            var obj = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(ee){
            try{
                var obj = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(E){alert("O navegador não suporta Ajax")}
        }
    }
    var _this = this;
    
    // Eventos
    this.success = '';
    this.error = '';
    
    if(typeof param != 'string'){ 
        // se params for um array
        for(i in param){
            this[i] = param[i]
        }
    }else{
        this[param] = value;
    }
    
    obj.open(this.method, this.url, true);
    
    for(i in this.header){
        obj.setRequestHeader(i, this.header[i]);
    }
    
    obj.onreadystatechange = function(){
        switch(obj.readyState){
            case 4:
                _this.success.call(obj);
            break;
        }
    }
    
    obj.send(this.params);
    
}

Quando tiver a oportunidade(amanhã), testarei esse código acima com a sua sugestão para ver o que retorna.

Vlw!

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...