5
respostas

[Dúvida] Calcula IMC não funciona com Pacientes importados com AJAX

O código funciona, quando adicionado o paciente, o esperado acontece, calcula imc, exibe mensagem de erro caso algo seja invalido.

O mesmo funciona adicionando via HTML, contudo o comportamento não se repete quando buscamos os pacientes de um arquivo externo.

Queria saber se algum poderia me ajudar com isso, deixarei meu código no GitHub, pois aqui não coube tudo.

https://github.com/mmgcnerds/Projeto-Js-Nutricao

Se alguém puder me ajudar agradeço.

5 respostas

Baixei o arquivo da última aula do professor, e o dele também não faz o cálculo, e nem exibe mensagens de erro quando os pacientes vem de um arquivo externo.

Oi, Matheus, testei o seu código e funcionou sem erro

Luis, como disse funciona, sim, contudo o comportamento que se esperam é o seguinte.

Quando clicado no botão Buscar Paciente (https://github.com/mmgcnerds/Projeto-Js-Nutricao/blob/master/introducao-javascript/js/buscar-pacientes.js) o mesmo importara os dados desta requisição (https://github.com/mmgcnerds/api-pacientes/blob/main/api-pacientes.json)

Então espera-se que, os pacientes com os dados inválidos (neste caso o paciente Matheus com 4 metros de altura) seja avisa com uma mensagem de erro, e calcule os demais IMC's

observando nesta massa de dados (https://raw.githubusercontent.com/mmgcnerds/api-pacientes/main/api-pacientes.json) que os imc's estão errados, foram colocados de forma aleatória, então deveria ser calculado como os outros.

Faltou validaPaciente(paciente) em "buscar-pacientes.js"

            pacientes.forEach(function(paciente) {
                let erros = validaPaciente(paciente)            
                if(!erros.length) adicionaPacienteNaTabela(paciente);
                else console.log(erros, paciente);                        
            });

Também percebi isso quando estava codando. O código das aulas não calcula o IMC, que vem do arquivo JSON, e também não informa se estiver algo errado com as informações de peso e altura da requisição feita pela busca dos pacientes.

No caso do cálculo do IMC eu dei um jeito e apenas fiz com que o IMC do paciente, em seus dados, na função montaTr, recebesse o valor de calculaImc.

    const dadosPacientes = [
        paciente.nome,
        paciente.peso,
        paciente.altura,
        paciente.gordura,
        paciente.imc = calculaImc(paciente.peso, paciente.altura),
    ];

Quanto ao caso de mostrar se as linhas estão incorretas adicionando o background vermelho. Usando um código parecido com o do Luis da para obter o resultado.

                const erro = validaPaciente(paciente);
                if (erro.length > 0) {
                    infoImc[i].textContent = "Informações Inválidas";
                    tr[i].classList.add("invalid-color");
                }