Fetch API
Written By: Avinash Malhotra
Updated on
Fetch API
Fetch API is Promise based api used to fetch resource across web server, almost same like AJAX but with easy syntax and more powerful features.
Fetch API can also send and receive data like XML, JSON, TEXT and HTML from web server without reloading.
fetch api was introduced in ES6. For IE and legacy browser, we can still use XMLHttpRequest.
Fetch Vs Ajax
Properties | Fetch | Ajax ( xhr) |
---|---|---|
ECMA Version | ES6 | ES5 |
Architecture | Promise based | Event Based |
Complexity | Easy | Complex |
Syntax | Simple | Verbose |
Request / Response | Supports | Supports but complex structure |
Cookies | send cookies | Cookie less |
Fetch
fetch api is based on Request and Response . Request is the incoming stream to server and Response is the outgoing stream from server.
Request is the URL orf resource.
then handler is used to get response of request. then includes a callback with Response.
fetch example
fetch(Request)
fetch example with then handler
fetch(Request).then(Response=>Response.text()).then(Response=>console.log(Response));
Request
Request is the incoming stream to the server. The first Parameter URL is compulsory. Second parameter is optional with options like http method, payload, etc.
Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Response
fetch('data.txt');
fetch with options
Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Response
fetch('data.txt',{method:"GET"});
fetch with payload
Promise {<pending>}
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Response
fetch('/postdata',{method:'POST',body:JSON.stringify({"name":"username"})});
Response
fetch api returns a Promise that resolves to Response of that request. This will even respond to HTTP Errors like 404 () Page not Found) or 500 ( Internal Server error). For such errors, the then() handler must check Response.ok or Response.status.
Response {type: 'basic', url: 'http://127.0.0.1:5501/data.txt', redirected: false, status: 200, ok: true, …}
fetch("data.txt").then(i=>i).then(i=>console.log(i));
Response.text()
Hello Fetch API
fetch("data.txt").then(i=>i.text()).then(i=>console.log(i));
Response.ok
response.ok return boolean value true or false. If the resource is found successfully, the true else false. See examples below.
true
fetch("data.txt").then(i=>i.ok).then(i=>console.log(i));
false
fetch("abc.txt").then(i=>i.ok).then(i=>console.log(i));
Response.status
Response.status return the HTTP Response of request, like 200, 404, 500 etc. See examples below.
200
fetch("data.txt").then(i=>i.status).then(i=>console.log(i));
404
fetch("abc.txt").then(i=>i.status).then(i=>console.log(i));
Fetch text data
To fetch text data, use Response.text() method in first then() handler with callback and Response parameter. This will convert Response data to string. To print string response, use another then() handler with callback and Response parameter.
text from data
fetch("data.txt").then(i=>i.text()).then(i=>document.querySelector(".app").textContent=i);
Fetch JSON data
To fetch JSON data, use Response.json() method in first then() handler with callback and Response parameter. This will convert Response data to JSOn Object. To print JSON response, use another then() handler with callback and Response parameter.
JSON data
fetch("data.json").then(i=>i.json()).then(i=>{
for( let j in i){
console.log(j, i[j]);
}
});
Weather API
In this example, we are using fetch api to fetch weather data of a city.
const city="delhi";
const appid="6565a145678cc21caccc3df7f2132a1c";
fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${appid}`).then(i=>i.json()).then(i=>{console.log(i.main.temp)})