JS об'єкт Fetch
Введення в об'єкт Fetch
Fetch
є сучасним інтерфейсом для здійснення мережевих запитів у JavaScript. Це сучасна альтернатива XMLHttpRequest
і є частиною Web API, що робить його доступним у більшості сучасних веб-браузерів.
Основна сила Fetch
полягає в його використанні обіцянок (promises), що надає більше контролю та гнучкості над асинхронними операціями. Коли ви виконуєте мережевий запит за допомогою Fetch
, він повертає обіцянку, яка може бути вирішена або відхилена залежно від результату запиту.
Приклад:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка:', error));
Тут ми робимо запит до вказаного URL. Метод fetch()
повертає обіцянку, яка при успішному виконанні запиту переходить до наступного етапу (використовуючи метод then()
). У нашому випадку, коли отримана відповідь від сервера, ми її перетворюємо в JSON-формат за допомогою методу response.json()
. Після цього, далі ми обробляємо отримані дані. Якщо під час виконання запиту виникає помилка, вона буде виведена в консоль завдяки блоку catch
.
Однією з великих переваг Fetch
є його здатність легко обробляти різні формати відповіді, такі як JSON, текст або бінарні дані. Це робить Fetch
ідеальним вибором для більшості мережевих операцій у сучасних веб-додатках.
Додатково, завдяки обіцянкам, ви можете легко комбінувати різні мережеві запити, використовуючи методи Promise.all()
або Promise.race()
, що дозволяє здійснювати паралельні запити або обирати запит, який завершиться першим відповідно.
Основні методи і властивості
Давайте розглянемо основні аспекти роботи з Fetch
, його методи та властивості, а також як ефективно його використовувати.
Метод fetch()
Цей метод використовується для ініціації мережевого запиту. Він приймає один обов'язковий аргумент – URL ресурсу, до якого слід звертатися, а також може приймати необов'язковий аргумент у вигляді об'єкта параметрів.
Приклад:
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка:', error));
У цьому прикладі ми виконуємо GET-запит до URL 'https://api.example.com/data'
і вказуємо, що очікуємо отримати дані у форматі JSON. Коли відповідь отримана, ми перетворюємо її у JSON і виводимо дані у консоль.
Властивість response.headers
Після виконання запиту за допомогою fetch()
ви можете отримати доступ до заголовків відповіді за допомогою властивості headers
об'єкта відповіді.
Приклад:
fetch('https://api.example.com/data')
.then(response => {
console.log(response.headers.get('Content-Type'));
return response.json();
})
.then(data => console.log(data));
Тут ми запитуємо заголовок 'Content-Type' з відповіді. Це допомагає нам з'ясувати, у якому форматі ми отримали дані.
Метод response.json()
Якщо ви знаєте, що відповідь сервера містить JSON-дані, ви можете використовувати цей метод для перетворення відповіді у формат JSON.
Приклад:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data));
У цьому прикладі ми знову робимо запит до сервера і, отримавши відповідь, одразу перетворюємо її на JSON. Потім ми можемо легко працювати з отриманими даними.
Метод response.text()
Якщо ви хочете отримати відповідь у текстовому форматі (наприклад, HTML або простий текст), ви можете використовувати метод response.text()
.
Приклад:
fetch('https://api.example.com/page')
.then(response => response.text())
.then(content => console.log(content));
Тут ми робимо запит до ресурсу, який повертає HTML-сторінку. Після отримання відповіді ми перетворюємо її у текстовий формат і виводимо зміст сторінки у консоль.
Нотатка: | Дуже важливо завжди додавати блок |
Порада: | Хоча сервер може відповісти, це не завжди гарантує, що відповідь є коректною. Перевіряйте Приклад:
Тут ми робимо запит до сервера, але перед обробкою відповіді перевіряємо, чи був запит успішним. Якщо ні, генеруємо помилку. |
Нотатка: | Використання |
Синтаксис
fetch(url, [options])
.then(response => {
// обробка відповіді
})
.catch(error => {
// обробка помилки
});
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
42 |
39 |
10.1 |
29 |
14 |
Переглядач | ||||
---|---|---|---|---|
42 |
42 |
39 |
10.3 |
Переглядач | ||
---|---|---|
18.0.0 |
1.0 |
Приклади
Крім стандартних GET-запитів, Fetch
дозволяє здійснювати інші типи запитів, наприклад POST, PUT або DELETE, завдяки передачі додаткових опцій.
У цьому прикладі ми відправляємо дані на сервер методом POST. Додаткові опції в fetch
дозволяють налаштувати заголовки та відправити тіло запиту у форматі JSON.
fetch('https://api.example.com/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Іван',
age: 30
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка:', error));
Коли користувач заповнює форму на сайті (наприклад, форму реєстрації або замовлення), ця інформація повинна бути відправлена на сервер для обробки. Fetch
може допомогти відправити ці дані на сервер у вигляді POST-запиту.
let formData = new FormData(document.querySelector('form'));
fetch('https://api.example.com/register', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка при відправці форми:', error));
Іноді користувачам сайтів потрібно оновити свої персональні дані. Замість завантаження нової сторінки, ми можемо використовувати Fetch
для відправки запиту PUT, щоб оновити існуючі дані користувача.
const userData = {
name: "Іван",
email: "[email protected]"
};
fetch('https://api.example.com/user/123', {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка при оновленні даних користувача:', error));
В багатьох сучасних веб-застосунках потрібно отримувати дані в реальному часі з різних джерел. API (Application Programming Interface) дозволяє нам отримувати такі дані. Ми можемо використовувати Fetch
для взаємодії з API і завантаження цих даних в наш застосунок.
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Помилка при завантаженні даних:', error));