5
respostas

Js não intercepta erro

Colocando o endereço url errado o sistema não intercepta o erro. No chrome já cai direto no erro:buscar-pacientes.js:27 GET https://api-pacientes.0herokuapp.com/pacientes net::ERR_CONNECTION_REFUSED (anonymous) @ buscar-pacientes.js:27

Abaixo o código js:

var botaoAdicionar = document.querySelector("#buscar-pacientes");

botaoAdicionar.addEventListener("click", function () {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "https://api-pacientes.0herokuapp.com/pacientes");


    xhr.addEventListener("load", function () {
        var erroAjax = document.querySelector("#erro-ajax");
        console.log(xhr.status);
        if (xhr.status == 200){
            erroAjax.classList.add("invisivel");
            var resposta = xhr.responseText;

            var pacientes = JSON.parse(resposta);

            pacientes.forEach(function (paciente) {
                adicionaPacientesTabela(paciente);
            });
        }else{
            erroAjax.classList.remove("invisivel");

        }

    });

    xhr.send();

});
5 respostas

Oi Anderson, tudo bem?

Me parece que o seu server está fora.

Vale um ponto de atenção com relação à requisições ajax e Cross Domain.

Abs

Olá Murilo, obrigado pela resposta. A diferença entre o que fiz e o demonstrado pelo professor foi que o arquivo que está fazendo a requisição ajax está hospedado em um servidor local e o dele está em uma pasta no computador.

Você acha que o problema seria esse?

Oi Anderson, tudo bem? Nesse caso você está fazendo uma requisição ajax para um serviço que está hospedado na heroku, a partir, do seu servidor de aplicação local, certo? Sempre que você faz requisições ajax entre domínios diferentes você pode ter problemas de cross domain.

No link (https://zinoui.com/blog/cross-domain-ajax-request) você pode entender melhor sobre esse problema e como evitá-lo.

Só uma dúvida, o serviço que está hospedado no heroku responde pelo protocolo HTTP GET, certo? Nesse caso se eu acessar a url através do browser deveria obter uma resposta, mas, aparentemente o serviço está fora do ar.

Abs

Pessoal,

Acho que a dúvida do Anderson é a mesma que a minha: o link está errado, com um zero antes do domínio, e a declaração if/else deveria detectar que não houve sucesso na requisição, mostrando uma mensagem de erro.

Isto não acontece. Acontece, porém, se você coloca um erro no recurso, "https://api-pacientes.herokuapp.com/paciente" (no lugar de pacientes), por exemplo.

Entonce, onde está o erro? A propriedade .status é a mais adequada para detectar erro de requisição quando ela nem chega em um servidor? É isso, Murilo? hahaha

Pessoal, como o Luis comentou acima, para detectar erros deste tipo em que a requisição nem chega a alcançar um servidor para que tenha algum erro de status como 404, 503, etc.. é preciso ficar escutando por eventos de erro no objeto XMLHttpRequest, deste modo:

xhr.addEventListener("error", function(){
        console.log("Ocorreu um erro!!!")
    })

Então além do evento de load que é para quando a requisição completa, também existe o evento de error para quando ela não consegue nem enviar a requisição por conta de um erro na URL ou algo do tipo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software