3
respostas

E se estivesse usando Fetch?

Tentei usar o fecth para fazer o post. Com o get, tudo certo, porém com o post, meu obejeto json não é enviado. O que fiz de errado?

Lembrando que com ajax, deu tudo certo!

fetch('https://cdc-react.herokuapp.com/api/autores', { credentials: 'include' }, 
    {  
      method: 'post',  
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify( {nome:this.state.nome, email:this.state.email, senha:this.state.senha} )
    })

    .then( response => {

      if (response.status !== 200 ) {
        console.log('Looks like there was a problem. Status Code: ' + response.status);
        return;
      }

      response.json().then(response => console.log('Request succeeded with JSON response', response) );

    } )

      .catch(error => console.log('Request failed', error));
3 respostas

Um teste rápido aqui no console e me parece tudo ok, qual é exatamente o erro?

image

Olá Rubens!

Aqui também ocorreu sucesso, porém o JSON do exercicio não foi alterado. Ou seja, meu dado não era enviado....Fiquei um bom tempo tentando refatorar o script para tentar funcionar e nada...aí queria saber se foi algo que fiz errado.

Eu fiz usando fetch, porém modifiquei umas coisas que o professor está ensinando.

O construtor ficou assim:

  constructor() {
    super();
    this.state = {
      authors: [],
      model: { nome: '', email: '', senha: '' },
    };
    this.enviaForm = this.enviaForm.bind(this);
  }

A função enviaForm com fetch ficou assim:

  enviaForm = (e) => {
    e.preventDefault();
    const Uri = 'http://localhost:8080/api/autores';
    const { model } = this.state;

    const requestInfo = {
      method: 'POST',
      body: JSON.stringify(model),
      headers: new Headers({
          'Content-type': 'application/json'
      })
  };

  fetch(Uri, requestInfo)
      .then(response => {
          if(response.ok) return response.text();
          throw new Error("Oops! Ocorreu um erro! :(");
      })
      .then(data => {
        this.setState({ authors: JSON.parse(data), model: {nome: '', email: '', senha: ''} });
      })
      .catch(e => console.log(e));
  }

E o formulário ficou assim:

<form className="pure-form pure-form-aligned" onSubmit={this.enviaForm} method="POST">
                  <div className="pure-control-group">
                    <label htmlFor="nome">Nome</label> 
                    <input id="nome" type="text" name="nome" value={this.state.model.nome} onChange={(e) => {
                      var { model } = this.state;
                      model.nome = e.target.value;
                      this.setState({ model });
                    }} />                  
                  </div>
                  <div className="pure-control-group">
                    <label htmlFor="email">Email</label> 
                    <input id="email" type="email" name="email" value={this.state.model.email} onChange={(e) => {
                      var { model } = this.state;
                      model.email = e.target.value;
                      this.setState({ model });
                    }}  />                  
                  </div>
                  <div className="pure-control-group">
                    <label htmlFor="senha">Senha</label> 
                    <input id="senha" type="password" name="senha" value={this.state.model.senha} onChange={(e) => {
                      var { model } = this.state;
                      model.senha = e.target.value;
                      this.setState({ model });
                    }} />                                      
                  </div>
                  <div className="pure-control-group">                                  
                    <label></label> 
                    <button type="submit" className="pure-button pure-button-primary">Gravar</button>                                    
                  </div>
                </form>