Задать вопрос

Почему $_POST оказывается пустым (axios)?

Добрый день. Проблема в том, что когда отправляю данные через axios. В ответ я получаю пустой $_POST.

код запроса
axios.post("/api.php?action=create", {myvalue:'строка', sub:'ahaha', value:22})
			.then(function(response){
        	console.log('Что-то произошло');
				if(response.data.error){
          app.errorMessage = response.data.message; 
          console.log('ошибка');
				} else{
					console.log('отлично');
				}
			});
      },


5cb98a5a5772c851837774.jpeg5cb989f8296f9368037565.jpeg5cb98ae2481c7134243194.jpeg5cb98a6ad8dc0288907484.jpeg
  • Вопрос задан
  • 3885 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 3
@ppyl Автор вопроса
Всем спасибо за ответы, вопрос решен.
Для того чтобы $_POST не был пустым, нужно в PHP сначала прописать:
$_POST = json_decode(file_get_contents('php://input'), true);
а потом уже обращаться к необходимым атрибутам
Ответ написан
kawabanga
@kawabanga
Принципиальным отличием от jQuery.ajax() является формат отправляемых данных методом $_POST. Если jQuery.ajax() отправляет данные с заголовком Content-Type: application/x-www-form-urlencoded;, то Axios с заголовком Content-Type: application/json;, то есть данные отправляются в JSON формате, поэтому в обработчике, который принимает данные (в большинстве случаев это PHP-скрипт), массив $_POST будет пустым. При необходимости можно изменить заголовки при отправке данных, но это будет не лучший вариант. Для того чтобы получить все отправленные данные в JSON формате, нужно обратиться к потоку php://input.

https://zyubin.ru/saitostroenie/web-razrabotka/axi...
Ответ написан
@DanKud
Потому что axios по умолчанию отправляет параметры в теле запроса как Content-Type: application/json и чтобы их прочитать нужно в PHP принимать так:

var_dump(file_get_contents('php://input'));

В итоге вы получите JSON-строку и сможет раскодировать ее получив все параметры - json_decode

Способы отправки параметров в Content-Type: application/x-www-form-urlencoded описаны в документации: https://github.com/axios/axios#using-applicationx-...

Или вы просто можете отправить URL-кодированную строку, а не объект, в параметры:
axios.post('aaa.php?action=create', 'myvalue=строка&sub=ahaha&value=22')
    .then(function(response) {
    .....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы