У меня есть скрипт, который обновляет количество товаров как в корзине покупок (в меню), так и на странице корзины покупок.Это вроде работает, но иногда, когда я обновляю количество, правильное количество отображается в моем меню при наведении, но не на странице корзины.
То же самое относится и к удалению продукта (но я не буду включать этот сценарий здесь, поскольку это в основном та же проблема).
Иногда, если я удаляю продукт из моего меню при наведении, продукт все еще отображается на моей странице корзины, только когда я обновляю страницу, продукт удаляется.
Этот код на странице моей корзины покупок имеет этот коддля количества:
session_start();
foreach($_SESSION['producten'] as $cart){
<input name="quantity" id="'.$cart['productid'].$cart['kuubkosten'].'" value="'.$cart['quantity'].'" type="number" min="1">
}
Затем с помощью JS я делаю это:
// Update cart quantities
$('body').on('click', '.update_cart_btn', function(event) {
// Stop default behaviour
event.preventDefault();
// Get the ID of the product
var elements = $('input[name="quantity"]'),
url = 'catalog/cart.php',
url1 = 'catalog/cartpage.php',
postBody = [];
for (var i=0; i<elements.length; i++) {
var element = $(elements[i]);
postBody.push({
product: element.attr('id'),
quantity: element.val()
})
}
// Post above values to shoppingcart
var posting = $.post( url, {quantityobject: JSON.stringify(postBody)} );
posting.done(function( data ) {
var content = $( data );
$( "#shoppingcart" ).empty().append( content );
});
// Post to the cartpage
var posting1 = $.post( url1, {quantityobject: JSON.stringify(postBody)} );
posting1.done(function( data1 ) {
var content1 = $( data1 );
$( "#cartpage" ).empty().append( content1 );
});
});
Затем в моем первом скрипте PHP ('catalog/cart.php')
Я делаю это (только часть кода, конечно, ятакже получите новый HTML-код с данными сеанса):
session_start();
if($_POST['quantityobject']){
$quantityobject = $_POST['quantityobject'];
$arrayquantity = json_decode($quantityobject);
foreach ($arrayquantity as $object) {
// Check if product exists in array
if (isset($_SESSION['producten'][$object->product])) {
// if so replace quantity with posted one
$_SESSION['producten'][$object->product]['quantity'] = $object->quantity;
}
}
}
Если я прав, он обновляет сеанс в cart.php
, а затем переходит к запросу cartpage.php
, когда сеанс уже был обновлен впервый вызов, поэтому он должен отображать последние данные сеанса.
Иногда это происходит, но не всегда, как будто ajax быстро движется, а мой PHP-скрипт не справляется?Дело в том, что он всегда работает в первом сценарии и только иногда для обоих сценариев.
Что я могу с этим поделать?
Если это поможет, то так будет выглядеть мой массив сеансов (пример):
Array
(
[3280|2 kuub] => Array
(
[productid] => 3
[productname] => Eikenhout pallet
[productalias] => eikenhout-pallet
[productcat] => Eikenhout
[productimage] => cms/images/catalogus/product.jpg
[catalias] => eikenhout
[price] => 150
[quantity] => 1
[kuubkosten] => 280|2 kuub
)
[3390|3 kuub] => Array
(
[productid] => 3
[productname] => Eikenhout pallet
[productalias] => eikenhout-pallet
[productcat] => Eikenhout
[productimage] => cms/images/catalogus/product.jpg
[catalias] => eikenhout
[price] => 150
[quantity] => 4
[kuubkosten] => 390|3 kuub
)
[35|4 kuub] => Array
(
[productid] => 3
[productname] => Eikenhout pallet
[productalias] => eikenhout-pallet
[productcat] => Eikenhout
[productimage] => cms/images/catalogus/product.jpg
[catalias] => eikenhout
[price] => 150
[quantity] => 1
[kuubkosten] => 5|4 kuub
)
)
У меня session_start();
добавлено везде.