json хранится в localstorage Отправляю так
function _onSubmitForm(e) {
var cartData,
orderData;
e.preventDefault();
cartData = _getCartData();
orderData = formData + '&cart=' + JSON.stringify(cartData);
$.ajax({
url: 'scripts/order.php ',
data: orderData,
type: 'POST',
cache: false,
dataType: 'json',
error: _orderError,
success: function(responce) {
if (responce.code === 'success') {
_orderSuccess(responce);
} else {
_orderError(responce);
}
},
complete: _orderComplete
});
}
function _getCartData() {
var cartData = cart.getData();
_.each(cart.getData(), function(item) {
item.name = encodeURIComponent(item.name);
});
return cartData;
}
Обработка в php
function sendEmailOrder($data) {
$cart = json_decode($data['cart']);
ob_start();
include('tpl/email_order.php');
$body = ob_get_contents();
ob_end_clean();
$sendClient = sendEmail(array(
'subject' => 'Ваш заказ с сайта ' . SITE,
'fromName' => EMAIL_FROM_NAME,
'fromEmail' => EMAIL_ADMIN,
'toEmail' => $data['email'],
'body' => $body
));
$sendAdmin = sendEmail(array(
'subject' => 'Новый заказ с сайта ' . SITE,
'fromName' => EMAIL_FROM_NAME,
'fromEmail' => EMAIL_ADMIN,
'toEmail' => EMAIL_ADMIN,
'body' => $body
));
}
$cart в php получается пустым. Ошибка в консоли
Invalid argument supplied for foreach()
Если в ajax запросе сделать alert, выглядит это как
name:%25B2%24D1%2588%
остальные данные json передаются нормально, и другие поля с русским текстом.
Только name кодируется вот так. Может поэтому проблема? В getCartData() какая-то ошибка?
Дополнение. Убрал проверку
'cart' => isset($_POST['cart']) ? stripslashes($_POST['cart']) : '[]'
Заменил на
'cart' => $_POST['cart']
Ошибка пропала. Но поле name все равно приходят кразозябрами. Получается, что это еще на стороне ajax криво кодируется?
Проблема решилась.
function _getCartData() {
var cartData = cart.getData();
_.each(cart.getData(), function(item) {
item.name = encodeURIComponent(item.name);
});
return cartData;
}
Убрал лишнее и все заработало.
function _getCartData() {
var cartData = cart.getData();
return cartData;
}
Всем спасибо.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости