Плагин 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 ответ
- Реализуйте свою корзину на стороне сервера.
- Держите в корзине предметы (товары) в коллекции или что-то в этом роде.
Каждый раз, когда Ajax-запрос поступает на серверную часть:
- Получить данные (product_id, количество,... и т. Д.) Из запроса.
- Получить тип операции (добавить, удалить..).
- Проверьте правильность данных.
- Заниматься необходимыми делами на стороне сервера (обновить базу данных, позвонить в веб-сервис и т. Д.)
- Если все в порядке, добавьте / удалите указанный продукт в / из вашей коллекции.
- Преобразуйте свою серверную корзину в JSON и напишите в ответ на вызов Ajax.
Каждый раз, когда 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" 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" Notebook PC" pid="101">
<input type="hidden" pimage="products/product3.jpg" pprice="550.00" pdesc=""
pcategory="Cameras" pname="Canon Digital Rebel" pid="102">
</div>
потому что после решения вашего первого вопроса задание другого в том же посте - плохая практика.