为什么此ajax请求后我的会话没有正确更新

时间:2019-02-08 09:11:02

标签: php jquery ajax

我有一个脚本可以更新购物车(在菜单中)和购物车页面中的产品数量。它可以工作,但是有时当我更新数量时,正确的数量会显示在我的悬停菜单中,而不是在购物车页面上。

删除产品也是如此(但由于基本相同的问题,我将不在此处包含该脚本)。

有时候,如果我从悬停菜单中删除产品,则该产品仍在我的购物车页面上可见,只有当我刷新页面后,该产品才会被删除。

我的购物车页面上的数量代码如下:

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();

0 个答案:

没有答案