Как передать переменную в php с помощью axios

152
06 февраля 2020, 14:10

Никак не могу разобраться как передать данные собранные с помощью Vue.js в php переменную. Пробовал с помощью axios, но ничего не вышло.

Задача такова: выбираем 2 значения с поля , нажимаем обновить, эти значения передаются в php функцию, там эти значения использую для запроса в БД, потом всё что получил вывожу в html.

Вот код JS:

< script type = "text/javascript" > 
  new Vue({ 
    el: '#all', 
    data: { 
      items: [], 
      selected1: '', 
      selected2: '', 
    }, 
    methods: { 
      get() { 
        axios({ 
            method: 'POST', 
            headers: { 
              'Content-Type': 'application/x-www-form-urlencoded' 
            }, 
            url: 'query.php', 
            responseType: 'json' 
          }) 
          .then(response => (this.items = (response.data))) 
          .catch(function(error) { 
            console.log(error) 
          }); 
      } 
    }, 
    mounted() { 
 
    } 
  }) < 
  /script>

Вот так пытаюсь принять на стороне сервера:

 if($_SERVER['REQUEST_METHOD']==='POST' && empty($_POST)) {
    $_POST = json_decode(file_get_contents('http://php://input'));
    $data = 10;
    $data = $_POST;
}
Answer 1

Вам нужно отправлять не как x-www-form-urlencoded , а как json:

const config = {
  baseURL: API_URL,
  headers: {
    post: {
      'Content-Type': 'application/json',
    },
  },
};
const instance = axios.create(config);
instance.post('/url', {param1: value1, param2:value2 });

Вот отсюда могу порекомендовать пару ссылок для понимания механики:

  • Understanding HTML Form Encoding: URL Encoded and Multipart Forms
  • application/x-www-form-urlencoded or multipart/form-data?

На стороне PHP код у вас правильный, я похожим разбираю:

$data = file_get_contents("php://input")
$json = json_decode($data, true);
Answer 2

Всем большое спасибо за ответы, всё помогло.

Реализовал так:

new Vue({ 
  el: '#all', 
  data: { 
    items: '', 
    selected1: '', 
    selected2: '', 
  }, 
  methods: { 
    get() { 
      axios({ 
          method: 'POST', 
          headers: { 
            'Content-Type': 'application/json' 
          }, 
          data: { 
            sel1: '2', 
            sel2: '5', 
          }, 
          url: 'query.php', 
          responseType: 'json' 
        }) 
        .then(response => (this.items = response.data)) 
        .catch(function(error) { 
          console.log(error) 
        }); 
    } 
  }, 
})

На стороне сервера:

$data = file_get_contents("php://input");
echo json_encode($data, true);

Но ещё появился вопрос, если я на стороне сервера ещё попытаюсь что то вывести, например:

data = file_get_contents("php://input");
echo json_encode($data, true);
echo 10;

Тогда не выводит совсем ничего (что логично). Как быть в таком случае? В том же ajax эту проблему решить легко.

READ ALSO
Безопасность при загрузке фото

Безопасность при загрузке фото

Что я не учёл для соблюдения безопасности при загрузки файла на сервер?

186
Ограниченный вывод в цикле

Ограниченный вывод в цикле

Добрй деньЕсть код, который выводит пагинацию на сайте

153
Как реализовать поиск по txt файлу? VK API PHP

Как реализовать поиск по txt файлу? VK API PHP

Суть проблемы/идеи такова

192
php и ajax работают долго

php и ajax работают долго

Есть корзина товаров, работает с помощью сессии, а также php обработчик и js файл, который шлет Ajax запросы в обработчик

128