Ajax-запросы

Пример ajax-запроса с передачей заголовка запроса (для отправки файла - из обычного надо удалить) и с чтением ответа, как текста (можно читать как json).

    let data = new FormData();
    data.append('param1', 'value1');
    fetch('', {  
        method: 'post',  
        headers: {  
               'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        },  
        mode: 'no-cors',
        headers: {
                'Content-Type': 'application/json',
        },
        body: data
    }).then(function(resp) {  
        if(resp.status == 200){
            resp.text().then(function(resp){  
                console.log(resp);  
            });
        }
    }).catch(err => alert(err));

Обратите внимание! параметр mode:'no-cors' не сможет разрешить скрипту выполнять кроссдоменные запросы, а только отключит ругань (возможно). Для отключения контроля кроссдоменных запросов этот параметр надо убрать, а в php-приемщике на бэкенде прописать одно (или все) из этого:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With");

Пример ajax-запроса с преобразованием кодировки ответа cp1251 => utf8.

    fetch('/url/', {
        method: 'get'
    }).then(function(resp){
        if(resp.status == 200){
            resp.arrayBuffer().then(function(buffer){
                let decoder = new TextDecoder('windows-1251');
                let resp = decoder.decode(buffer);
                console.log(resp); 
            });
        }
    }).catch(err => alert(err));

Пример синхронного ajax-запроса.

async function exampleFetch() {
    const response = await fetch('https://reqres.in/api/users/2');
    const json = await response.json();
    console.log(json);
}

exampleFetch()