Размещено: 2023-12-09 18:11:28
Теги: js
AJAX С ПОМОЩЬЮ FETCH
Аяксы можно отправлять не только с помощью XMLHttpRequest, но и с помощью fetch(), оно позволяет делать запросы, схожие с XMLHttpRequest (XHR). Отличие заключается в том, что Fetch API использует Promises (Обещания), которые позволяют избегать катастрофического количества callback'ов, идущих друг за другом, внутри друг друга.
простейший GET-запрос выглядит следующим образом:
let response = await fetch('/pages/6'); if(response.ok) { let text = await response.text(); console.log(text); }
Что бы это заработало в функции, перед функцией надо обязательно указывать как она вызывается синхронно или асинхронно:
async function status(coin_id) { let response = await fetch('ajax/status.php?coin_id='+coin_id); if(response.ok) { let text = await response.text(); console.log(text); } }
Либо через промисы, без await, тогда после fetch идет fetch(url).then(function(response){}) где response (сама переменная может называться как угодно, допустим не response, а result) - это результат предыдущего действия, который передается в функцию для дальнейшей работы с ним
async function status(coin_id,coin_status) { let params=new URLSearchParams({coin_id: coin_id,coin_status: coin_status}); fetch('ajax/status.php?'+params.toString()).then(function(response){ if(response.ok) { console.log(response.json()); } }); }
Response предоставляет несколько методов, основанных на промисах, для доступа к телу ответа в различных форматах:
- response.text() – читает ответ и возвращает как обычный текст
- response.json() – декодирует ответ в формате JSON
- response.formData() – возвращает ответ как объект FormData
- response.blob() – возвращает объект как Blob (бинарные данные с типом)
- response.arrayBuffer() – возвращает ответ как ArrayBuffer (низкоуровневое представление бинарных данных)
- response.body – это объект ReadableStream, с помощью которого можно считывать тело запроса по частям
Для отправки POST-запроса необходимо использовать параметры options в конструкции fetch(url,options):
- method – HTTP метод, например POST (также поддерживаются GET, PUT, DELETE и пр.)
- body – тело запроса (например, строка в формате JSON),
- headers — (опционально) заголовок запроса.
Например, этот код отправляет объект user как JSON:
let user = {name: 'John', surname: 'Smith'}; let response = await fetch(url, {method: 'POST', headers: {'Content-Type': 'application/json;charset=utf-8'}, body: JSON.stringify(user)}); let result = await response.json(); //получение ответа в виде json alert(result.message);
На эту страницу чаще всего попадают по запросам: