O básico sobre fetch()

Fetch, permite fazer request da mesma forma como era feito antigamente com o XMLHttpRequest. Uma das diferenças é que ele utiliza Promisses, o que gera uma API limpa e simples.

Request básico

Fetch recebe dois parâmetros, um sendo a url, e o outro as opções:

fetch('/site/url')
  .then(function(response) { // Resposta })
  .catch(function(err) { // Errou! });

Se você usar es6 fica ainda mais bonito:

fetch('/site/url')
  .then(response => console.log(response))
  .catch(err => console.log('Errou!'))

Lidando com JSON

Se você for usar JSON, o parâmetro do callback tem um método chamado .json(), que ira transformar sua resposta em um objeto javascript:

fetch('/site/url/json')
  .then(function(response) {
    // Converte para JSON 
    return response.json(); 
  })
  .then(function(js) {
    // Objeto javascript
    console.log(js);
  });

Text

Se o seu serviço recebe um HTML como resposta, aqui está como você lida com uma resposta em html ou texto:

fetch('/site/url')
  .then(function(response) {
    // Transforma em texto
    return response.text();
  }).then(function(txt) {
    // String
    console.log(txt);
  });

Headers and Metadatas

Response headers e metadatas são encontrados no objeto response, e o método get é mostrado a seguir:

fetch('/site/url')
  .then(function(response) {    
    console.log(response.headers.get('Content-Type'));             
    console.log(response.headers.get('Date'));
    console.log(response.status);
    console.log(response.statusText);      
    console.log(response.type);
    console.log(response.url); 
});

Você também pode setar headers no seu request, mas não pode setar cookies.

fetch('/site/url', 
  { 
    headers: { 
      'Accept': 'application/json',
      'Content-Type': 'application/json' 
   }
});

Método POST

Você também pode usar esse método com o fetch, basta setar as opções como eu mostro a seguir.

fetch('/site/url', 
  { 
    method: 'post',
    headers: {
      "Content-type": "application/x-www-form-urlencoded"
    },
    body: 'a=1&b=2' 
  })
  .then(function(res){
    return res.json();
  })
  .then(function (data) {
    console.log('Resposta em JSON', data);
  })
  .catch(function (error) {
    console.log('Faustão fellings', error);
  });

Compatibilidade

Fetch ainda não tem suporte em 100% dos browsers mas você pode usar um polyfill feito pelo pessoal do github.

O intuito desse post foi mostrar o básico se você deseja saber ainda mais recomendo a leitura desse posts que vale muito a pena.

home