Получение данных из POST json и отправка по почте

Рейтинг: 0Ответов: 1Опубликовано: 27.03.2023

Возникли трудности с получением данных POST json, на почту приходят пустые данные.

JS файл отправляет данные

$('#feedback form').on('submit',function(){
    var form = $(this);
    var btn = form.find('#sendOrder');
    if (btn.hasClass('sending')){
        return false;
    }
    btn.addClass('sending').html('Подождите...');
    var result = $('#rTotal').clone();
    result.find('tbody tr').filter( ':even').addClass('silverRow');
    var data = {
        name:form.find('input[name=name]').val(),
        to:form.find('input[name=toRashet]').val(),
        contact:form.find('input[name=contact]').val(),
        disc:$('input[name=disc]').val(),
        manager:$('#manConsole').html(),
        izdelia:order.getIzdeliyaTable(),
        order:result.html(),
        material:$('.stone.cBlock.active').attr('data-id'),
        mCount:order.q,
        price:order.totalSumm,
        page:window.location.href
    };
    $('#feedback').find('.result').remove();
    $.ajax({
        type: 'POST',
        url: '/ajax/feedback.php',
        data: data,
        dataType: 'json',
        crossOrigin: true,
        success: function (data) {
            $('#feedback').append($('<p>',{html:'Спасибо за обращение. В ближайшее время мы с Вами свяжемся.','class':'result'}));
            btn.removeClass('sending').html('Отправить повторно');
        },
        error: function (xhr, str) {
            $('#feedback').append($('<p>',{html:'Спасибо за обращение. В ближайшее время мы с Вами свяжемся.','class':'result'}));
            btn.removeClass('sending').html('Отправить повторно');
        }
    });
    
    return false;
});

PHP файл с получением данных и отправкой на почту.

$data = file_get_contents("php://input");
//$data = $_POST('data');
$decoded = json_decode($data);
foreach ($decoded as $data) {
    $f_name = $data->to;
    $f_to = $data->to;
    $f_contact = $data->contact;
    $f_disc = $data->disc;
    $f_manager = $data->manager;
    $f_izdelia = $data->izdelia;
    $f_order = $data->order;
    $f_material = $data->material;
    $f_mCount = $data->mCount;
    $f_price = $data->price;
    $f_page = $data->page;
}

Пробовал использовать:

  1. $data = file_get_contents("php://input");
  2. $data = $_POST('data');
  3. var_dump (); Данные не передаются

Ответы

▲ 0Принят

Бывает что данные до php не доходят потому что не настроен принимать json. Попробуйте вот такую отправку, и сообщите результат.

PHP

<?php
$_POST = json_decode(file_get_contents('php://input'), true);
echo var_dump($_POST);

JS

//ФУНКЦИЯ ДЛЯ ОТПРАВКИ ДАННЫХ
const postData = async (url, body) => {
  const req = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-type': 'application/json',
    },
    body: body,
  });

  if (!req.ok) {
    throw new Error(`Failed to fetch ${url}: ${req.statusText} ${req.status}`);
  }
  return await req.text();
};

//ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ С ФОРМОЙ.

const forms = document.querySelector('form');

//СБОР ДАННЫХ С ФОРМЫ. СОБИРАЕТ ДАННЫЕ У КОТОРЫХ УСТАНОВЛЕН АТРИБУТ name В форме HTML

const formData = new FormData(form);

//КОНВЕРТИРУЕМ НАШИ ДАННЫЕ В JSON

const json = JSON.stringify(Object.fromEntries(formData.entries()));

//ВЫЗОВ ФУНКЦИИ ОТПРАВКИ ДАННЫХ

postData('/ajax/feedback.php', json)
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.log(error);
  });