Пустое тело запроса при использовании выборки

Я пытаюсь сделать вызовы graphql из компонента React на сервер PHP, используя fetch. Это первый раз, когда я пытаюсь использовать fetch.

Я использую React JS на стороне браузера и Symfony 4 на стороне сервера. Однако все мои вызовы заканчиваются пустым телом на стороне сервера, хотя инструменты разработчика моего браузера, похоже, указывают, что данные отправлены.

При использовании graphiql запросы выполняются успешно. Я пытаюсь максимально имитировать запрос graphiql от React, но тело всегда пустое.

Вот звонок:

fetch('/api', {
    'method': 'post',
    'credentials': 'include',
    'headers': {
        'Content-Type': 'application/json',
    },
    'body': JSON.stringify({
        "query": "mutation {UpdateActionStatus(input: {actionId: 61, status: TO_DO}) { id }}",
        "variables": null
    }),
}).then(r => {
    console.log(r.json());

    return r.json();
}).catch(error => {
    console.log('There has been a problem with your fetch operation: ', error.message);
});

Я пробовал с mode, установленным на cors, no-cors, same-origin, navigate: ничего из этого не работает.

Я пробовал с Firefox и Chrome: все равно не повезло.

Изменение типа контента на application/graphql тоже не работает.

Я видел много вопросов, связанных с пустыми телами как в ответах, так и в запросах при использовании fetch, в stackoverflow и в других местах, но ни одно из найденных решений не подходит для моего случая.

Я также пробовал следующий, гораздо более грубый вызов, но безрезультатно. Кажется, я просто не могу использовать fetch по причине, которую не могу объяснить:

fetch('/api', {
    'method': 'post',
    'credentials': 'include',
    'headers': {
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    'body': 'test=test',
});

Что делать? Я пропустил что-то простое здесь?


person Zephyr    schedule 16.01.2018    source источник
comment
Ваш бэкенд symfony4, ожидает ли он тела json или почтового сообщения в форме? У меня была похожая проблема с пустым телом при попытке запросить сервер silex (он же symfony light).   -  person k0pernikus    schedule 16.01.2018
comment
Я прочитал запрос из точки входа index.php, Symfony еще не ожидает какого-либо определенного формата в этой точке, но тело все еще пусто.   -  person Zephyr    schedule 16.01.2018
comment
'test=test' не будет работать, если ваш сервер не ожидает параметр с именем test. значения должны соответствовать свойствам класса, которые ожидает конечная точка   -  person Liam Kenneth    schedule 16.01.2018
comment
Возможный дубликат Fetch in react native не отправляет сообщение   -  person Martijn    schedule 29.04.2018


Ответы (2)


Теперь я использую GraphQL в сочетании с React вместо прямого использования fetch, и в основном это работает довольно хорошо.

person Zephyr    schedule 02.07.2019

Убедитесь, что вы правильно отправляете заголовки Content-Type и Accept.

'Accept': 'application/json',
'Content-Type': 'application/json', 
person Anurag Bhagsain    schedule 21.07.2021