В браузерах на ПК и андройд смартфонах скрипт отрабатывает нормально. На сафари же, приходит пустой ответ
Скрипт запроса данных
u = {
action: "setfields"
},
m = e.ajax({
type: "POST",
url: myajax.url,
data: u,
success: function(n) {
if (alert(n), t(n)) {
var i = (n = JSON.parse(n)).name,
a = n.phone,
o = n.summ,
l = n.nametovar;
var id = n.id;
var resSe = n.res;
var qtySe = n.qty;
e('#sendResId').val(resSe);
e('#sendResQty').val(qtySe);
e("#pay_name").val('Оплата товара' + l + '"');
e("#pay_summ").val(o);
e("#pay_tran").val('Транзакция № ' + id);
e('input[name="billing_first_name"]').val(i);
e('input[name="billing_phone"]').val(a);
e('input[name="formcomment"]').val(l);
e('input[name="sum"]').val(o);
}
}
});
Обработка запроса в functions.php (WordPress)
add_action('wp_ajax_setfields', 'setfield_callback');
add_action('wp_ajax_nopriv_setfields', 'setfield_callback');
function setfield_callback() {
//echo $_COOKIE['visitor_username'];
$name = $_COOKIE['visitor_username'];
$phone = $_COOKIE['visitor_userphone'];
$summ = $_COOKIE['visitor_summ'];
$nametovar = $_COOKIE['visitor_nametovar'];
$idord = $_COOKIE['visitor_idorder'];
$backRes = $_COOKIE['visitor_res'];
$result = array('status' => 'ok', 'name' => $name, 'phone' => $phone, 'summ' => $summ, 'nametovar' => $nametovar, 'id' => $idord, 'res' => $backRes, 'qty' => $backQty);
echo json_encode($result);
wp_die();
}
Скрипт отправки данных
var u = {
action: "my_action",
idProduct: r,
qtyProducts: c,
firstname: a,
phones: o,
nametovars: l,
summ: p
},
m = e.ajax({
type: "POST",
url: myajax.url,
data: u,
success: function(e) {
alert(e);
t(e) && (e = JSON.parse(e))
}
});
m.done(function(t) {
e("#log").html(t)
}), m.fail(function(e, t) {
alert("[my_action] Request failed: " + t + e);
})
Обработка в functions.php
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb;
$whatever = $_POST['idProduct'];
$qty = $_POST['qtyProducts'];
$evention = $_POST['evention'];
$name = $_POST['firstname'];
$phone = $_POST['phones'];
$nametovar = $_POST['nametovars'];
$summ = $_POST['summ'];
$result = array();
if($name=='none'){
$name='';
}
require_once __DIR__.'/sms.ru.php';
$SMS_status = false;
for($i = 0; $i < count($whatever); $i++)
{
add_product_to_cart($whatever[$i]);
}
$smsru = new SMSRU_NEW('7a6b4fd54fds546fds46dsdrt4323');
$data = new stdClass();
$data->to = $phone;
$data->text = 'Ваша заявка принята';
$sms = $smsru->send_one($data);
if ($sms->status == "OK") {
$SMS_status = true;
} else {
$SMS_status = $sms->status_text;
}
$wpdb->insert(
'wp_order_init',
array(
'status' => 'Начат',
'time' => current_time('mysql', 1),
'phone_user' => $phone,
'name_user' => $name,
'name_product' => $nametovar,
'id_products' => $res,
),
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
)
);
$lastID = $wpdb->insert_id;
unset( $_COOKIE['visitor_username'] );
setcookie( 'visitor_username', '', time() - ( 15 * 60 ) );
unset( $_COOKIE['visitor_userphone'] );
setcookie( 'visitor_userphone', '', time() - ( 15 * 60 ) );
unset( $_COOKIE['visitor_nametovar'] );
setcookie( 'visitor_nametovar', '', time() - ( 15 * 60 ) );
unset( $_COOKIE['visitor_idorder'] );
setcookie( 'visitor_idorder', '', time() - ( 15 * 60 ) );
unset( $_COOKIE['visitor_summ'] );
setcookie( 'visitor_summ', '', time() - ( 15 * 60 ) );
unset( $_COOKIE['visitor_res'] );
setcookie( 'visitor_res', '', time() - ( 15 * 60 ) );
setcookie('visitor_username', $name, time()+1209600, COOKIEPATH, false);
setcookie('visitor_userphone', $phone, time()+1209600, COOKIEPATH, false);
setcookie('visitor_nametovar', $nametovar, time()+1209600, COOKIEPATH, false);
setcookie('visitor_idorder', $lastID, time()+1209600, COOKIEPATH, false);
setcookie('visitor_summ', $summ, time()+1209600, COOKIEPATH, false);
setcookie('visitor_res', $res, time()+1209600, COOKIEPATH, false);
$result = array('SMSstatus' => $SMS_status);
echo json_encode($result);
wp_die();
}
Самое интересное то, что если добавить в скрипт отправки данных окно вывода ошибки alert ( alert("[my_action] Request failed: " + t + e); ), вместо console.log скрипт отрабатывает через раз. С console.log вообще нет никаких данных (ответ от setfields "status="ok"; name="null"; phone="null" ....)