Почему мой сеанс не обновляется правильно после этого запроса AJAX - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть скрипт, который обновляет количество товаров как в корзине покупок (в меню), так и на странице корзины покупок.Это вроде работает, но иногда, когда я обновляю количество, правильное количество отображается в моем меню при наведении, но не на странице корзины.

То же самое относится и к удалению продукта (но я не буду включать этот сценарий здесь, поскольку это в основном та же проблема).

Иногда, если я удаляю продукт из моего меню при наведении, продукт все еще отображается на моей странице корзины, только когда я обновляю страницу, продукт удаляется.

Этот код на странице моей корзины покупок имеет этот коддля количества:

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(); добавлено везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...