11.前台修改购物车商品的数量
public void updateItemAjax(HttpServletRequest request, HttpServletResponse response)
throws IOException {
Cart cart = (Cart) request.getSession().getAttribute("cart");
Map<String, CartItem> map = cart.getCartItems();
String pid = request.getParameter("pid");
int quantity = Integer.parseInt(request.getParameter("quantity"));
CartItem ci = map.get(pid);
// 移除ci的subTotal
cart.setTotal(cart.getTotal() - ci.getSubTotal());
ci.setBuyNum(quantity);
ci.setSubTotal(ci.getBuyNum() * ci.getProduct().getShop_price());
// 加上ci的subTotal
cart.setTotal(cart.getTotal() + ci.getSubTotal());
String jsonStr = "{'subTotal':"+ci.getSubTotal()+",'total':"+cart.getTotal()+"}";
System.out.println(jsonStr);
response.getWriter().println(jsonStr);
}
前台代码:
<script type="text/javascript">
function deleteItem(pid){
location.href = "${pageContext.request.contextPath}/product?method=deleteItem&&pid="+pid;
}
function updateItem(pid){
var quantity = document.getElementById("quantity").value;
location.href = "${pageContext.request.contextPath}/product?method=updateItem&&pid="+pid+"&&quantity="+quantity;
}
function update(pid){
var quantity = $("#"+pid+"quantity").val();
if (quantity == ""){
$("#"+pid+"quantity").val(1);
quantity = 1;
}
$.ajax({
url: "${pageContext.request.contextPath}/product?method=updateItemAjax",
data:{"pid":pid,"quantity":quantity},
type:"post",
dataType:"json",
success:function(data){
$("#"+pid).text("¥"+data.subTotal);
$("#total").text("¥"+data.total+"元");
},
error:function(e){
alert(e.status);
}
});
}
</script>
注意:
当存在多个商品时,需要区分商品对应的pid
<td width="10%"><input type="text" name="quantity" value="${carItem.buyNum}" maxlength="4" id="${carItem.product.pid}quantity"
size="10" οninput="update(${carItem.product.pid})"></td>
<td width="15%"><span class="subtotal" id="${carItem.product.pid}">¥${carItem.subTotal}</span></td>
修改数量的同时自动修改总计价钱