🌐 Fetch API = Modern HTTP Requests
XMLHttpRequest is outdated. Fetch API provides a modern, promise-based approach to HTTP requests.
📝 Fetch API Basics
// GET Request
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
// POST Request
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-token'
},
body: JSON.stringify({
name: 'John Doe',
email: 'john@example.com'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
// PUT Request
fetch('https://api.example.com/data/1', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Jane Doe'
})
});
// DELETE Request
fetch('https://api.example.com/data/1', {
method: 'DELETE'
});
🎯 Advanced Fetch Patterns
// Error Handling
async function fetchData(url) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('Fetch error:', error);
throw error;
}
}
// Request with Timeout
function fetchWithTimeout(url, options = {}, timeout = 5000) {
return Promise.race([
fetch(url, options),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timeout')), timeout)
)
]);
}
// Request with Abort
const controller = new AbortController();
const signal = controller.signal;
fetch('https://api.example.com/data', { signal })
.then(response => response.json())
.catch(error => {
if (error.name === 'AbortError') {
console.log('Request aborted');
}
});
// Abort after 2 seconds
setTimeout(() => controller.abort(), 2000);
// Retry Logic
async function fetchWithRetry(url, options = {}, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
const response = await fetch(url, options);
if (response.ok) {
return response;
}
} catch (error) {
if (i === retries - 1) throw error;
await new Promise(resolve =>
setTimeout(resolve, Math.pow(2, i) * 1000)
);
}
}
}
💡 Fetch Best Practices
- Always check response.ok
- Use async/await for readability
- Implement retry logic for flaky networks
- Use AbortController for cleanup
- Set appropriate timeout
Fetch API is the modern standard for HTTP requests. It’s simpler and more powerful than XMLHttpRequest.
