Показать сообщение отдельно
  #9 (permalink)  
Старый 18.05.2017, 04:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

AVAV84, если на сервере единый обработчик состояния корзины (краткого и расширенного представления), то выгоднее всегда возвращать JSON.

Пусть сервер хранит корзину таким образом:

$basket = [
    10 => ['quantity' => 2, 'price' => 200],
    20 => ['quantity' => 5, 'price' => 150],
    30 => ['quantity' => 3, 'price' => 300]
];

if(array_key_exists($_POST['id'], $basket)) {
    $basket[$_POST['id']]['quantity'] += (int)$_POST['mode'];
    exit(json_encode(['quantity' => array_sum(array_column($basket, 'quantity')), 
                      'total' => array_sum(array_map('array_product', $basket))]
        )
    ); 
}


На клиенте элементы с идентификаторами quantity и total отображают количество товара в корзине и их сумму соответственно.

Все кнопки добавления/уменьшения товара имеют имя класса mode, режим операции в атрибутах data-mode: 1 и -1 соответственно, и единый обработчик. Тогда:

$('div.mode').click(function() {
    $.ajax({
        ....,
        dataType: 'json',
        data: {id: получить в чем-то хранящийся id товара, mode: $(this).data('mode')},
        success: function(response) {
             $.each(response, function(k, v) {
                  $('#'+k).text(v)
             })
        }
    })   
})


То есть, таким образом клиент может одним обработчиком управлять отображением как краткого так и полного представления корзины.

PS. Пример РНР для версии не ниже 5.5.
Ответить с цитированием