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

Duvida sobre o resultado do exercício

No fim desse exercício, não é mostrado o resultado: https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-2/task/17510

Pelo que li, o esperado seria uma mensagem de alerta "Negociação enviada com sucesso", mas não estou conseguindo enviar a negociação para o servidor,

error.jpg

e não encontrei o erro no meu código:

function sendPost(event) {
  event.preventDefault();
  console.log("Enviando post");

  let $ = document.querySelector.bind(document);
  let inputData = $('[data-js="data"]');
  let inputQtd = $('[data-js="input-qtd"]');
  let inputValor = $('[data-js="input-valor"]');

  let negociacao = {
    data: inputData.value,
    qtd: inputQtd.value,
    value: inputValor.value
  };

  let xhr = new XMLHttpRequest();
  xhr.open('POST', '/negociacoes');
  xhr.setRequestHeader('Content-type', 'application/json');
  xhr.onreadystatechange = () => {
    if(xhr.readystate === 4) {
      if(xhr.status === 200) {
        inputData.value = '';
        inputQtd.value = 1;
        inputValor.value = 0.0;
        input.Data.focus();
        alert(`Negociação enviada com sucesso`);
        return;
      }
    }
    else {
      alert(`Não foi possível enviar a negociação: ${xhr.responseText}`);
    }
  };
  xhr.send(JSON.stringify(negociacao));
}
<html>
<head>
    <meta charset="UTF-8">
    <title>Negociações</title>
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">
</head>

<body class="container">

    <form class="form">
        <div class="form-group">
            <label for="data">Data</label>
            <input data-js="data" type="date" id="data" class="form-control" required autofocus/>
        </div>
        <div class="form-group">
            <label for="quantidade">Quantidade</label>
            <input data-js="input-qtd" type="number" min="1" step="1" id="quantidade" class="form-control" value="1" required/>
        </div>
        <div class="form-group">
            <label for="valor">Valor</label>
            <input data-js="input-valor" id="valor" type="number" class="form-control"  min="0.01" step="0.01" value="0.0" required />
        </div>
        <button class="btn btn-primary" type="submit" onclick="sendPost(event)">
          Enviar dados para servidor
        </button>
    </form>

    <script src="post.js"></script>
</body>
</html>
5 respostas

Oi Roger, para realmente o código nos ajudar é importante que você nos diga se teve algum erro... No console do navegador, aparece algum erro?

Olá, Alberto.

Não aparece erro no console, porém o esperado era que o alert a ser executado fosse o do if:

if(xhr.readystate === 4) {
      if(xhr.status === 200) {
        inputData.value = '';
        inputQtd.value = 1;
        inputValor.value = 0.0;
        input.Data.focus();
        alert(`Negociação enviada com sucesso`);
        return;
      }
    }

E não é o que está acontecendo (conforme print da imagem acima). Ou seja, o if não está sendo lido, apenas o else e não estou conseguindo encontrar o erro na lógica do algoritimo.

alguém?

solução!

nesta parte

xhr.open('POST', '/negociacoes', );

deveria ser

xhr.open('POST', '/negociacoes', true);

e nesta parte

input.Data.focus();

deveria ser

inputData.focus();

e não tem return na função.

Esses foram os erros que achei, veja se funciona fazendo essas alterações :)

Oi, Mônica.

Obrigado por responder, em breve irei testar o código e lhe digo se funcionou!