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

(Resolvido) req.status == 0


*FIT*

Pergunta

Bom dia Galera, estou usando uma função em ajax para fazer algumas solicitações dinamicas sem dar refresh na pagina, até ontem estava funcionando normal, hoje já não. Percebo que o req.status está retornando 0 em vez de 200.

Vou colocar a função aqui, na verdade não mudei nada de ontem pra hoje, apenas coloquei um get a mais na função. Por isso não entendo o que ocorre.

function getTexto(imagem,texto,cor,fonte) {
        var strURL="imagem.php?imagem="+imagem+"&texto="+texto+"&cor="+cor+"&fonte="+fonte;
        var req = getXMLHTTP();
        
        if (req) {
            
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {                        
                        document.getElementById('imagem').innerHTML=req.responseText;                        
                    } else {
                        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                    }
                }                
            }            
            req.open("GET", strURL, true);
            req.send(null);
        }        
    }

Agradeço desde já, tenham um bom dia e um ótimo feriado amanha, hehe.

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
então você está mentindo, porque você mudou :lol: , já tentou tirar o "get a mais" e ver se continua não funcionando?

Sim, toda alteração que faço, costumo deixar um backup salvo caso precise voltar, e cheguei a fazer isso, mas o erro persiste.

Ou seja, o erro não está nesse get...rs

Link para o comentário
Compartilhar em outros sites

  • 0
Se você tentar acessar o arquivo diretamente pelo navegador ocorre algum erro?

Acessando direto não ocorre nenhum erro, o acesso é normal.

Estou usando esse script também, coloquei alguns alerts e percebi que ele não está executando o ActiveXObject, testei em varia maquinas e navegadores, e nada.

function getXMLHTTP() { 
        var xmlhttp=false;    
        try{
            xmlhttp=new XMLHttpRequest();
        }
        catch(e)    {        
            try{            
                xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){
                try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1){
                    xmlhttp=false;
                }
            }
        }
             
        return xmlhttp;
    }

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

  • 0

Testei o código com pequenas alterações (somente mudei a página e a forma de mostrar o retorno) e funcionou perfeitamente.

Quanto ao alert no ActiveXObject, é normal não aparecer. Aquela parte do código só vai ser executada quando o objeto XMLHttpRequest não puder ser instanciado.

Acho que o problema pode estar na forma como a página imagem.php escreve o conteúdo.

Link para o comentário
Compartilhar em outros sites

  • 0

É, cheguei a pensar nisso, mas é estranho, pois como havia dito no começo do tópico, o script estava funcionando perfeitamente, e de um dia para o outro parou, agora não funciona, rs... estranho, mas vou ver como posso resolver.

Realmente achei estranho esse script exatamente estar com problema, pois uso em outro sites que funcionam perfeitamente.

Muito Obrigado pela força Jonathan, vou ver o que consigo aqui, abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Então, não cheguei a mudar nada em nenhum script, simplesmente parou de funcionar.

Até pensei que fosse um problema no servidor, mas testei em outros 2 servidores e não funcionou.

Vou rever o todo o código e procedimentos que estou utilizando, quebrar em várias partes e ir testando pedaço por pedaço, deve ter passado alguma coisa em branco que esteja conflitando em alguma parte, retornando uma variavel vazia. Algum erro tem que ter, apesar de ter funcionado por uns 2 dias.

Link para o comentário
Compartilhar em outros sites

  • 0

Então Jonathan, digamos que fiz o possível aqui, hehe

mas realmente não consegui fazer funcionar, só funciona quando jogo a url juntamente com os gets direto no navegador.

mas chamando com o javascript, nada.

Ai fiquei com uma duvida, qual a causa do status retornar 0 ao invés de 200?

segue o código como ficou agora

<script type="text/javascript" language="javascript">
        
                function lerTexto(img)
                {
                    
                  texto=document.getElementById("texto").value;
                  cor=document.getElementById("colorpickerField1").value;
                      if (1==1) {
                            for(i = 0; i < document.personaliza.fontes.length; i++){
                            if (document.personaliza.fontes[i].checked) {
                              break;
                            }
                        }
                        fonte = document.personaliza.fontes[i].value;
                      }
                  getTexto(img,texto,cor,fonte);
                }
        
</script> 
  
<script language="javascript" type="text/javascript">
    
    var xmlhttp = getXmlHttpRequest();
    
function getXmlHttpRequest() { 
        if(window.XMLHttpRequest){
            return new XMLHttpRequest();
        }
        else if (window.ActiveXObject){
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
}
    
    
    function getTexto(img,txt,cr,fnt) {
        
        var strURL = "imagem.php?img="+img+"&txt="+txt+"&cr="+cr+"&fnt="+fnt;
        
        if (xmlhttp) {
            
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4) {
                    // only if "OK"
                    if (xmlhttp.status == 200) {
                        document.getElementById('imagem').innerHTML=xmlhttp.responseText;                        
                    } else {
                        alert("Ocorreu um erro ao usar XMLHTTP:\n" + xmlhttp.statusText);
                    }
                }                
            }            
            xmlhttp.open("GET", strURL, true);
            xmlhttp.send(null);
        }        
    }

    
</script>

</head>

<body>
<span id="imagem">
    <img src="imagem.jpg" width="245" height="184" />
</span><br />
<form name="personaliza" method="post" action="">
<input name="texto" type="text" id="texto"/><br />

<input type="text" maxlength="6" size="6" id="colorpickerField1" value="000000" name="cor"/><br />

<input type="radio" value="century" name="fontes" id="fontes" /> Century<br />
<input type="radio" value="champagne" name="fontes" id="fontes" /> Champagne<br />

<input class="bt_ok" border="none" type="submit" value="" name="cadastra" style="margin-left:5px;" onClick="lerTexto('imagem.jpg')"/>
</form>

Ps: preciso estudar um pouco mais de js, rs!

Link para o comentário
Compartilhar em outros sites

  • 0

Pesquisei sobre o xmlhttp.status com valor 0 e não encontrei nada muito interessante. Aparentemente significa que a conexão foi encerrada pelo servidor.

Se possível poste o retorno da página quando acessada normalmente pelo navegador e os cabeçalhos que são recuperados via AJAX.

Para escrever os cabeçalhos, você pode utilizar o seguinte código:

document.body.innerHTML = xmlhttp.getAllResponseHeaders()

O código acima deve ficar dentro do bloco condicional if (xmlhttp.readyState == 4).

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, muito obrigado Jonathan, pesquisei muito, e na verdade não encontrei muita coisa também, mas acabei resolvendo meu problema...rs

Andei lendo uns posts do Kakarotto, e vi que ele deu a dica para um membro, que na verdade tinha um outro problema, mas não custava tentar né.

Primeiro, mudei:

xmlhttp.open("GET", strURL, true);
por:
xmlhttp.open("GET", strURL, false);

Apesar de sempre usar como true, e funcionar, dessa vez fiz isso, escrevi o status em um alert, e vi que agora estava retornando 200, até ai perfeito, mas não trazia o resultado na tela.

Foi ai que me deparei com outro "erro", fiz isso tudo pra não ter que dar refresh na página, mas esqueci de usar button, no caso estava usando o submit, ou seja, ele até chamava a função, mas atualizava a página e dava no mesmo.

Fiz essas pequenas alterações e ficou perfeito, agora é só dar continuidade no projeto, que não vai ser pequeno, rsrs... Mas estamos nesse ramo pra isso mesmo né...

Bom, fica ai ai dica, caso outra pessoa passe pelo mesmo problema. Abraços e muito obrigado mesmo por tudo!

Link para o comentário
Compartilhar em outros sites

  • 0

Que bom que conseguiu resolver!

Só lembre-se de que ao utilizar o terceiro parâmetro como false, você estará trabalhando com requisições síncronas, isto é, o navegador ficará "travado" até obter o retorno.

Acho que não é necessário mudar o modo da requisição para síncrono, provavelmente ao clicar no botão o navegador abortava a requisição e por isso o status chegava como 0. Se for isso, você pode continuar usando o modo assíncrono, que é mais recomendado.

Vou marcar o tópico como Resolvido, mas qualquer coisa posta aí.

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...