JavaScript — Axios HTTP всегда возвращается с пустыми данными

Я задавал этот вопрос раньше и не смог получить ответ. Я был в состоянии использовать метод: «получить», как показано ниже, чтобы заставить его работать, так что все было в порядке, но на этот раз мне нужно использовать сообщение. В другом проекте (использующем реагировать, редукс, php, webpack, xampp) появилась та же проблема, и я пытаюсь ее решить. Итак, вот оно:

register.php

  echo $_GET['task'];

index.js

  const values = {task: 'doSomething', username: 'username'}
axios({
url: "./server/register.php",
timeout: 20000,
method: 'get',
params: values
}).then(function(response){console.log(response.data)})

Когда я делаю вышеупомянутое, все в порядке, и данные выходят из системы как «doSomething». Однако, когда я пытаюсь использовать axios ({method: ‘POST’}) и изменить php на $ _POST [‘task’], я получаю сообщение о том, что $ _POST [‘task’] не определено, как показано ниже:

index.js

  axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: values
}).then(function(response){console.log(response.data)})

register.php

echo $_POST['task'];

уведомление: Неопределенный индекс: задача

Также, когда я пытаюсь сделать это с помощью axios.post (), я сталкиваюсь с точно такой же проблемой. Я хочу использовать почтовый запрос здесь. Кто-нибудь может пролить свет на это для меня?

2

Решение

Хорошо, после того, как я почесал голову, я нашел ответ. На PHP эта строка должна быть добавлена ​​прежде, чем я смогу получить доступ к любым данным POST:

$_POST = json_decode(file_get_contents('php://input'), true);
echo $_POST['task'];

Насколько я понимаю, данные, вводимые из axios, представляют собой JSON, поэтому мы должны вернуть их в строку в кодировке JSON с помощью file_get_contents (), а затем преобразовать их в переменную php из строки в кодировке JSON с помощью json_decode. Надеюсь, это поможет кому-то еще. Спасибо.

6

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

Ваш URL имеет плохой формат: это путь, а не URL. Вы должны использовать относительный (/register.php) или абсолютный (Http: //localhost/register.php) URL зависит от того, как вы обслуживаете этот файл на своем веб-сервере.

1

В качестве альтернативы на стороне клиента вы можете массировать данные в JavaScript перед их отправкой, устраняя необходимость редактирования данных POST на стороне сервера:

var formatAxiosPostData = function (obj) {
// Create formData object:
var formDataObject = new FormData();
// This step necessary when the obj contains additional overhead data,
// such as what's created on a 'this.$data' Vue.js object:
obj = JSON.parse(JSON.stringify(obj));
// Fill formData object with the key-value pairs:
Object.keys(obj).forEach(function (key) {
formDataObject.append(key, obj[key]);
});
return formDataObject;
};

// example usage:
axios({
url: "/projects/myProject/server/register.php",
method: 'post',
data: formatAxiosPostData(values)
}).then(function (response){
console.log(response.data);
});
0
По вопросам рекламы [email protected]