@stackman

Почему ajax в Safari срабатывает через раз?

В браузерах на ПК и андройд смартфонах скрипт отрабатывает нормально. На сафари же, приходит пустой ответ

Скрипт запроса данных
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" ....)
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 1
da411d
@da411d
Веб-разработчик. Анимешник. Барабанщик.
59f0f5801242b563069848.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы