Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Buscar somente um campo com XMLHttpRequest

Olá

Tenho o seguinte html...

  <section>
    <h1 id="importarNome">Nome do usuário</h1>
  </section>

Tenho também uma api local que liga o cliente a um banco de dados onde tem os dados do cliente e ela busca os usuários por id.

Tenho minha função AJAX

function get(url) {

  return new Promise((resolve, reject) => {

  let xhr = new XMLHttpRequest();

  xhr.open("GET", url);
  xhr.onreadystatechange = () => {

    if(xhr.readyState == 4) {
      if(xhr.status == 200) {
      resolve(JSON.parse(xhr.responseText));
      } else {
        reject(xhr.responseText);
      }
    }
  };

  xhr.send();
  });
}

Da forma que aprendemos nos curso de JavaScript e JavaScript avançado, conseguimos adicionar todos os dados do usuário em uma tabela a partir das funções no clique do botão importar, porém, gostaria de saber como faço para que, quando o meu usuário abrir a página, somente o seu nome apareça em meu H1 como no html acima.

Resumindo... O usuário entra na página e o get busca só o nome dele no meu banco de dados através do XMLHttpRequest e exiba no H1 sem ele ter que clicar em nada.

Como posso fazer isso, alguém pode me ajudar? Obrigado!

9 respostas

Você pode usar seu conhecimento introdutório de JavaScript que aprendeu no curso de JavaScript da Alura, nem é necessário o conhecimento que você aprendeu no curso avançado. Vou explicar...

Se sua API retorna o nome do usuário, quando você a pegar você faz

document.querySelector('#importarNome').textContent = usuario;

No caso, usuario é uma variável que contém o nome do usuário, no caso, será o JSON retornado pela a API que você criou.

Sim, entendi essa parte, mas a parte que eu não consigo mesmo entender é como busco somente o nome. Quando vou fazer o cadastro no via post eu crio

 let usuario = {

      nome: document.querySelector("#nome").value
    };
   post("http://localhost:endereco", usuario)
      .then(() => {
        console.log("Sucesso");
      })
      .catch(erro => console.log(`erro: ${erro}`));
  }

Desta forma estou pedindo que o post envie somente o nome, mas no banco tem outros campos, porém ele envia somente o nome, como peço....

Não estou conseguindo também entender como busco somente o nome via get.

Obrigado pela força professor!

solução!

Olha, você precisa saber qual estrutura de dados esta retornando da sua API. Se foi você que fez, esta devolvendo apenas o nome ou um objeto? Há cursos na Alura que ensinam a criar API's.

Vou supor que você esta devolvendo apenas o nome (o restante é com você):

get('endereco-da-sua-api-aqui').then(retornoDaSuaApi => {
     document.querySelector('#importarNome').value = retornoDaSuaApi;
});

O get devolve uma promise, então através do then temos acesso ao seu retorno.

Aliás, você fez isso no curso quando busca as negociações, o que muda é onde você vai gravar o resultado.

Você criou a API? Quem cria deve saber como pegar os dados. Você precisa consultar essa API e entender qual é o retorno dela.

Quem criou a API foi meu sobrinho, vou olhar com ele. Obrigado por me ajudar professor

Então, pergunte para ele o que esta sendo retornado. Esse retorno é acessível da maneira que coloquei anteriormente para você. Se ele retorna um nome, excelente, retornoDaSuaApi será o nome, se é um objeto com propriedades, tem que saber qual propriedade do objeto será retornado. Combinado?

Mas em essência é esse trecho de código que lhe passsei.

Outra coisa, no curso III, você aprenderá usar a Fetch API, que simplifica bastante o acesso via AJAX. Continue com o curso para poder ver essa parte.

Valeu professor, deu certo aqui!!! Mais uma vez obrigado!

E sobre o curso, estou fazendo eles várias vezes..r.s.. Quero aprender pensar em JavaScript, meus dedos terão que ter cérebros...rs

Excelente, futuro Cangaceiro JavaScript!

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