Размещено: 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 предоставляет несколько методов, основанных на промисах, для доступа к телу ответа в различных форматах:

Для отправки POST-запроса необходимо использовать параметры options в конструкции fetch(url,options):

Например, этот код отправляет объект 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);

На эту страницу чаще всего попадают по запросам: