我有一个脚本可以更新购物车(在菜单中)和购物车页面中的产品数量。它可以工作,但是有时当我更新数量时,正确的数量会显示在我的悬停菜单中,而不是在购物车页面上。
删除产品也是如此(但由于基本相同的问题,我将不在此处包含该脚本)。
有时候,如果我从悬停菜单中删除产品,则该产品仍在我的购物车页面上可见,只有当我刷新页面后,该产品才会被删除。
我的购物车页面上的数量代码如下:
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();
。