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.