Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.11.2021, 05:53
Интересующийся
Отправить личное сообщение для KingdaKa Посмотреть профиль Найти все сообщения от KingdaKa
 
Регистрация: 26.09.2021
Сообщений: 10

fetch отсылает пустые данные
fetch('comments.php', {
        method:'POST',
        body: 'test',
    });


1. Скрипт php принимает $_POST, он оказывается пустым, но скрипт отрабатывает 100% т.к. создает новый файл.
2. Ошибок в консоли нет.
3. WebDev Chrome "Сеть" показывает, что вне зависимости от размера body отсылается 189 байт.
4. При посылке из классической html-формы php-скрипт данные прекрасно принимает.

Как я понимаю ошибка где-то в JS. Гугл что-то не особо даёт ответа пока, но я не прекращаю попытки

В чём может быть дело?
Ответить с цитированием
  #2 (permalink)  
Старый 26.11.2021, 07:31
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,572

Заголовок Content-type надо отправлять.
Ответить с цитированием
  #3 (permalink)  
Старый 26.11.2021, 09:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,605

Сообщение от KingdaKa
Скрипт php принимает $_POST, он оказывается пустым
На Node.js столкнулся с таким... В итоге делаем так

const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
const urlencoded = new URLSearchParams();
urlencoded.append("name", name);
var requestOptions = {
	method: "POST",
	headers: myHeaders,
	body: urlencoded,
	redirect: "follow",
};
fetch(url, requestOptions)
Ответить с цитированием
  #4 (permalink)  
Старый 26.11.2021, 09:20
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,605

KingdaKa, если данные из формы - можно и так

const fd = new FormData(e.target)
const requestOptions = {
	method: "POST",
	body: fd,
}
fetch(url, requestOptions)
Ответить с цитированием
  #5 (permalink)  
Старый 26.11.2021, 16:52
Интересующийся
Отправить личное сообщение для KingdaKa Посмотреть профиль Найти все сообщения от KingdaKa
 
Регистрация: 26.09.2021
Сообщений: 10

Сообщение от voraa Посмотреть сообщение
Заголовок Content-type надо отправлять.
Естественно, но во-первых, цитирую этот сайт: "Заметим, что так как тело запроса body – строка, то заголовок Content-Type по умолчанию будет text/plain;charset=UTF-8."

Во-вторых, проблема не в этом точно, потому что headers я пробовал прописывать.
Ответить с цитированием
  #6 (permalink)  
Старый 26.11.2021, 16:53
Интересующийся
Отправить личное сообщение для KingdaKa Посмотреть профиль Найти все сообщения от KingdaKa
 
Регистрация: 26.09.2021
Сообщений: 10

Сообщение от ksa Посмотреть сообщение
KingdaKa, если данные из формы - можно и так

const fd = new FormData(e.target)
const requestOptions = {
	method: "POST",
	body: fd,
}
fetch(url, requestOptions)
Спасибо, кэп
Ответить с цитированием
  #7 (permalink)  
Старый 26.11.2021, 17:10
Интересующийся
Отправить личное сообщение для KingdaKa Посмотреть профиль Найти все сообщения от KingdaKa
 
Регистрация: 26.09.2021
Сообщений: 10

Не отсылается именно body, а вот header пожалуйста, я его все данные вижу в переменной $_SERVER. А вот да $_REQUEST пуста
Ответить с цитированием
  #8 (permalink)  
Старый 26.11.2021, 17:12
Интересующийся
Отправить личное сообщение для KingdaKa Посмотреть профиль Найти все сообщения от KingdaKa
 
Регистрация: 26.09.2021
Сообщений: 10

fetch('comments.php', {
        method: 'POST',
        mode: 'cors',
        cache: 'no-cache',
        credentials: 'same-origin',
        headers: {
        'Content-Type': 'text/html; charset=utf-8'
        },
        redirect: 'follow',
        referrerPolicy: 'no-referrer',
        body: 'test'
    });
Ответить с цитированием
  #9 (permalink)  
Старый 27.11.2021, 19:23
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,647

Сообщение от KingdaKa
headers я пробовал прописывать.
Дело не просто в наличии заголовка Content-Type, а в том что там написано.

Сообщение от KingdaKa
заголовок Content-Type по умолчанию будет text/plain
А для $_POST нужно application/x-www-form-urlencoded или multipart/form-data.

Сообщение от KingdaKa
А вот да $_REQUEST пуста
Естественно, ведь $_REQUEST состоит из того же $_POST.

Последний раз редактировалось Rise, 27.11.2021 в 19:28.
Ответить с цитированием
  #10 (permalink)  
Старый 28.11.2021, 07:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 1,572

При content-type отличных от application/x-www-form-urlencoded или multipart/form-data надо самому читать необработанные данные запроса file_get_contents("php://input")
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отображаются данные. fetch phoenix200689 Библиотеки/Тулкиты/Фреймворки 0 17.12.2017 23:43
Передать данные через Ajax zahod5277 AJAX и COMET 1 20.01.2015 22:31
Контекстное меню как считать данные из таблицы xela1980 jQuery 25 31.05.2013 14:20
Не совсем обычный фрейм и выезжающий текст при наводе на картинку. amaz245 Элементы интерфейса 35 25.12.2010 17:29
HttpProxy не отсылает данные метеодом POST kostiaGt ExtJS 2 05.11.2009 17:36