Получение данных из POST json и отправка по почте
Возникли трудности с получением данных 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;
}
Пробовал использовать:
- $data = file_get_contents("php://input");
- $data = $_POST('data');
- var_dump (); Данные не передаются
Ответы (1 шт):
Автор решения: Elmir
→ Ссылка
Бывает что данные до 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);
});