Есть корзина товаров, работает с помощью сессии, а также php обработчик и js файл, который шлет Ajax запросы в обработчик.
Так вот, допустим у нас 10 товаров в корзине. Теперь я удаляю их по одному.
Если это делать медленно, то все пройдет успешно.
Если нажимать на крестики быстро, то могут удалиться не все товары (они не успевают) или, если удалятся все, то количестве товаров в корзине и итоговая сумма могут не обнулиться до конца.
Почему так происходит?
Пример Ajax запроса:
//Обновление виджета корзины в шапке
function updateCart() {
$.post('/wp-admin/admin-ajax.php', {
action: 'updateCart'
},
function (res) {
$('.cart-btn').html(res);
}
);
}
updateCart();
Пример PHP обработчика:
function updateCart(){
$data = json_decode(stripslashes($_SESSION['cart']), ARRAY_A);
// Перебераю массив
foreach ($data as $key => $value) {
// Узнаю общее количество товара
$quantity_product += $value;
// Узнаю цену и умножаю на колличество
$price_product += get_field('price', $key) * $value;
}
// Вывожу колличество товара и сумму
if(!$data){
echo "Товаров 0 (0) тг.";
} else {
if($quantity_product == 1) {
echo "$quantity_product товар ($price_product) тг.";
} elseif($quantity_product > 1) {
echo "Товаров: $quantity_product ($price_product) тг.";
}
}
die();
}
Ответы на множественные запросы не обязательно придут в том порядке, в котором отправлены.
Проще всего запретить новый запрос, пока не отработан предыдущий, хотя это далеко не самое лучшее решение. Например, так:
var isWaiting;
//Обновление виджета корзины в шапке
function updateCart() {
if (isWaiting) { return; }
isWaiting = true;
$.post('/wp-admin/admin-ajax.php',
{
action: 'updateCart'
},
function (res) {
//Очистить флаг ожидания после успешного выполнения запроса
isWaiting = false;
$('.cart-btn').html(res);
}
).fail(function(res) {
//Очистить флаг ожидания при ошибке запроса
isWaiting = false;
});
}
updateCart();
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я постараюсь описать как можно подробнее суть моей проблемы, что я пытаюсь сделать и что я уже пробовал сделать, итак
Нужно реализовать следующее: Заменять английскую E на YE, если E стоит в начале любого слова в строке или после a, o, i, e, u, y