javascript — response.js, использующий axios для публикации данных в php, но php echo пустой

Я использую response.js, Axios и PHP для публикации данных в базе данных MySQL

Это мой кодact.js

sendData(){
var data = new FormData();
data.append('name', 'jessie');
data.append('time', '12:00');
data.append('food', 'milk');
data.append('nutrition', 'vitaminA');
axios.post(
'./sendData.php',{
data: data

})
.then(response => {
console.log(response)
console.log(response.data)
this.filter = response.data
})
.catch(e => {
this.errors.push(e)
})
}

И это мой код PHP

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$database = "mydb";$conn = new mysqli($servername, $username, $password, $database);if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully yayaya";
echo "the post after this";
echo json_encode($_POST);

?>

И это моя консоль Chrome

Connected successfully yayayathe post after this[]

Я не знаю, почему мой PHP получает пустые данные и выводит пустое значение.

3

Решение

Согласно Axios Docs

По умолчанию axios сериализует объекты JavaScript в JSON.

Одним из вариантов является читать JSON из тела в вашем коде PHP:

$entityBody = file_get_contents('php://input');

Тогда нет необходимости оборачивать ваши данные в FormDataВы можете просто добавить его напрямую:

axios.post(
'./sendData.php',{
data: {
name: 'jessie',
time: '12:00',
food: 'milk',
nutrition: 'vitaminA'
}
})

Другой вариант — установить Content-type Заголовок в axios:

axios.post(
'./sendData.php',{
data: data
{
headers: {
'Content-type': 'multipart/form-data'
}
}
})

Вариант 1 кажется мне лучше, хотя

2

Другие решения

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

Прежде всего установите это Достаточное количество Пакет узлов в вашем проекте. Тогда ты сможешь stringify ваши данные с помощью этой функции и отправить данные на сервер.

axios Уже ясно, что проблема в его файле документации. Ты можешь проверить используя-applicationx-WWW-форм-urlencoded-формате ссылка для получения дополнительной информации.

Что бы ни использовать простой способ решения этой проблемы в моем сценарии, вот мой код:

var qs = require('qs');
var palyload = {
'command': 'userLogin',
"email" : this.state.email,
"password" : this.state.password,
};
axios.post( apiBaseUrl, qs.stringify(palyload) ).then(
function(response){
console.log(response);
}
);

тогда ваш сервер PHP показывает правильные глобальные данные, как показано ниже:

Array
(
[command] => userLogin
[email] => asdf@test.com
[password] => af12548@$
)
1

Попробуй взять json из phpinput, это для меня полезно:

echo file_get_contents('php://input');
echo json_decode(file_get_contents('php://input'), true);
0