При отправке JSON методом POST через Fetch, соответствующий массив в PHP остаётся пустым

Я создаю веб-приложение, включающее в себя возможность регистрации и последующей авторизации, в целях обучения. Суть проблемы такова: при нажатии на кнопку выхода из аккаунта на сервер должен отправиться запрос для закрытия сессии. В тело запроса записываю короткий JSON. В chrome dev tools видно, что запрос уходит с данными, ответ от сервера приходит, но массив POST в PHP остаётся пустым. Самое, на мой взгляд, странное - это то, что, если создать пустой FormData и добавить в него те же данные, а затем отправить, то массив POST пополнится как и задумано.

Вот этот вариант не работает:

exitLink.addEventListener('click', async (e) => {
    e.preventDefault()
    localStorage.clear()
    const sBody = { 'exit': 1 } 
    response = await fetch('/scripts/php/setSessionData.php',{
        method: 'POST',
        body: JSON.stringify(sBody),
        headers: {
            'Content-Type': 'application/json;charset=utf-8'
        }
    })
})

А вот этот почему-то работает:

exitLink.addEventListener('click', async (e) => {
    e.preventDefault()
    localStorage.clear()
    fd = new FormData()
    fd.append('exit','1')
    response = await fetch('/scripts/php/setSessionData.php',{
        method: 'POST',
        body: fd
    })
})

Вот принимающий PHP-файл:

<?
session_start();
if(isset($_POST['exit'])){
    session_abort();
    $stat = false;
}
else {
    $_SESSION['auth'] = true;
    $_SESSION['login'] = $login;
    $_SESSION['role'] = 'user';
    $stat = true;
}

echo json_encode(array(
    'stat' => $stat
));

Используется локальный сервер Apache.

Буду признателен, если кто-нибудь расскажет почему у меня не получается отправить данные в JSON формате. А ещё, есть сомнения по поводу данной реализации выхода из аккаунта. Поделитесь опытом, кто сталкивался с подобным.


Ответы (0 шт):