Плагин Jquery Shopping Cart: внедрение управления сессиями

Я использую корзину покупок jquery http://plugins.jquery.com/project/smartcart2 Может кто-нибудь помочь мне в реализации методов onAdded, onRemoved, onUpdated, чтобы вызвать Ajax для поддержания сеанса на стороне сервера. Я делаю Ajax-запрос на сервер всякий раз, когда объект добавляется / удаляется / обновляется, и получаю данные обратно в формате JSON. Я обновляю кол-во вроде obj.attr("qty", eval(msg)[1]); с обновлениями с сервера. Тем не менее, если я нажму кнопку обновить или данные таблицы будут заполнены, товаров в корзине больше не будет. Таким образом, вопрос на самом деле заключается в том, как заполнить данные из сессии, чтобы продукт по-прежнему оставался в корзине после обновления и т. Д.

$('#SmartCart').smartCart({ 
onAdded: function(pObj,quantity){ cartAdded(pObj,quantity);}, 
onRemoved: function(pObj){ cartRemoved(pObj);},
onUpdated: function(pObj,quantity){ cartUpdated(pObj,quantity); },
});

function cartAdded(obj,qty){
var product_id = obj.attr("pid");
var quantity = qty; 
// Ajax calls for adding product to cart
function(pObj,quantity){
    cartAdded(pObj,quantity);}
}

function cartRemoved(obj){
var product_id = obj.attr("pid");
// Ajax call for removing product from cart
}

function cartUpdated(obj,qty){
var product_id = obj.attr("pid");
var quantity = qty; 
// Ajax call for updating product on cart
}

function cartAdded(obj,qty){
            var partNum = obj.attr("partNumber");
            var quantity = qty;                
         $.ajax({
        type: 'POST',
        url: "json/sessionManager",
        data : "partNum=" + partNum + "&qty=" + quantity,
        dataType: "text/json",
        success: function(msg){
            obj.attr("qty", msg[1]);
        },
        error: function(httpRequest, textStatus, errorThrown) {
           alert("status=" + textStatus + ",error=" + errorThrown);
        }
    });  
        }

Я был бы очень признателен за такие же рекомендации.

1 ответ

Решение
  1. Реализуйте свою корзину на стороне сервера.
  2. Держите в корзине предметы (товары) в коллекции или что-то в этом роде.
  3. Каждый раз, когда Ajax-запрос поступает на серверную часть:

    • Получить данные (product_id, количество,... и т. Д.) Из запроса.
    • Получить тип операции (добавить, удалить..).
    • Проверьте правильность данных.
    • Заниматься необходимыми делами на стороне сервера (обновить базу данных, позвонить в веб-сервис и т. Д.)
    • Если все в порядке, добавьте / удалите указанный продукт в / из вашей коллекции.
    • Преобразуйте свою серверную корзину в JSON и напишите в ответ на вызов Ajax.
  4. Каждый раз, когда JSON-ответ поступает на сторону клиента:

    • Обновите свою корзину новыми данными.

Для части Ajax. Используйте функцию jQuery Ajax()

$.ajax({
   type: "POST",
   url: "cart.jsp",
   data: "p_id=SKU001&quantity=4",
   success: function(msg){
     alert( "FOUR SKU001 ADDED TO CART");
   }
 });

Редактировать: Ох, я вижу. product_id не определен означает, что ваш obj.attr("pid"); не работает.

Этот плагин использует скрытые вводы HTML для определений продукта. (глупо, если вы спросите меня) У этих входов есть некоторые псевдоатрибуты, которые вы можете получить obj.attr("pid");, Если в вашей форме нет ввода или ваши входные данные не имеют этих псевдоатрибутов, ваш код завершится неудачно.

УБЕДИТЕСЬ, ЧТО ВАШИ СКРЫТЫЕ ВХОДЫ В HTML ИМЕЮТ ЭТУ ПИСЬМО.

Например:

<div id="SmartCart" class="scMain">
  <input type="hidden" pimage="products/product1.jpg" pprice="2299.99" pdesc="" 
    pcategory="Computers" pname="Apple MacBook Pro MA464LL/A 15.4" pid="100">

  <input type="hidden" pimage="products/product6.jpg" pprice="2699.99" pdesc="" 
    pcategory="Computers" pname="Sony VAIO 11.1&quot; Notebook PC" pid="101">
  <input type="hidden" pimage="products/product3.jpg" pprice="550.00" pdesc="" 
    pcategory="Cameras" pname="Canon Digital Rebel" pid="102">
</div>

Из документации авторов:

Описание: Текст, выделенный жирным шрифтом, является псевдоатрибутами, описывающими продукт. Как название продукта, цена, описание и т. Д.

  • pid: идентификатор продукта
  • pname: название продукта
  • pdesc: описание продукта
  • цена: цена товара
  • pimage: источник изображения продукта
  • pcategory: категория продукта

Вы можете добавить дополнительные сведения о продукте, добавив новые атрибуты к элементу ввода, и вы сможете отобразить их в списке продуктов или корзине, отредактировав шаблон. Вы можете настроить имена псевдоатрибутов и настроить их в файле плагина в разделе "Настройки атрибутов".

Edit2: я думаю, у вас есть трудности в этом разделе моих рекомендаций.

Каждый раз, когда JSON-ответ поступает на сторону клиента:

Обновите свою корзину новыми данными.

Скрытые входы ниже - ваши данные. Откройте еще один вопрос на stackru и спросите

Как я могу изменить (создать, обновить, удалить) эти входы в JQuery

<div id="SmartCart" class="scMain">
  <input type="hidden" pimage="products/product1.jpg" pprice="2299.99" pdesc="" 
    pcategory="Computers" pname="Apple MacBook Pro MA464LL/A 15.4" pid="100">

  <input type="hidden" pimage="products/product6.jpg" pprice="2699.99" pdesc="" 
    pcategory="Computers" pname="Sony VAIO 11.1&quot; Notebook PC" pid="101">
  <input type="hidden" pimage="products/product3.jpg" pprice="550.00" pdesc="" 
    pcategory="Cameras" pname="Canon Digital Rebel" pid="102">
</div>

потому что после решения вашего первого вопроса задание другого в том же посте - плохая практика.

Другие вопросы по тегам