tags: 移动商城项目
移动商城第十八篇【结算】
当我们点击结算的时候,我们要做什么事情呢??

- 要结算了当然是需要登陆的,所以在结算之前判断该用户登陆了没有
- 还需要再一次检查库存是否足够
- 跳转到确认页面上。
结算
登陆了
- 查看库存
- 库存足够
- 跳转到页面上
- 库存不够
- 提示用户
- 库存足够
没登陆
- 弹出登陆页面
通过AJAX获取用户的信息,如果没有获取得到,那么说明用户还没有登陆。于是就要弹出登陆窗口
如果获取得到用户的信息了,那么就对其进行库存校验 在对购物车的商品库存校验,我们并不一定要通过前台把数据传递给后台进行处理
- 因为我们购物车的数据和Cookie里边存储的数据是一模一样的。因此,我们可以直接解析Cookie就可以对其进行库存校验了!
function trueBuy(){
//弹出框来对其登陆
$.ajax({
url:"${path}/user/getUser.do",
type:"post",
dataType:"text",
success:function(responseText){
var userObj = $.parseJSON(responseText);
if(userObj.user != null){
var result = validCar();
if(result == "success"){
window.location.href = "${path}/order/toSubmitOrder.do";
}else{
alert(result);
}
}else{
tipShow("#loginAlert");
}
},
error:function(){
alert("系统错误");
}
})
}
登陆
function loginAjax() {
var username = $("#username").val();
var password = $("#password").val();
var captcha = $("#captcha").val();
$.ajax({
url:"${path}/user/loginAjax.do",
type:"post",
dataType:"text",
data:{
username:username,
password:password,
captcha:captcha
},
success:function(responseText){
if(responseText == "caperror"){
$("#errorName").html("验证码错误");
$("#errorName").show(500);
}else if(responseText == "userpasserror"){
$("#errorName").html("用户名或者密码错误");
$("#errorName").show(500);
}else if(responseText == "success"){
$("#loginAlertIs").html(username);
tipHide("#loginAlert");
//校验库存
var result = validCar();
if(result == "success"){
window.location.href = "${path}/order/toSubmitOrder.do";
}else{
alert(result);
}
}
},
error:function(){
alert("系统错误");
}
})
}
验证购物车库存是否足够
我们并不需要外界传递id和数据进来,直接使用Cookie来对其判断就行了。因为我们的数据本来就是从Cookie来的。!
function validCar(){
var result = "success";
$.ajax({
url:"${path}/cart/validCar.do",
type:"post",
dataType:"text",
async:false,
success:function(responseText){
result = responseText;
},
error:function(){
alert("系统错误");
}
})
return result;
}
public String validateCar(HttpServletRequest request, HttpServletResponse response) {
List<EbCart> cartList = null;
StringBuilder builder = null;
//json的配置对象
JsonConfig jc = new JsonConfig();
//设置要转换的类
jc.setRootClass(EbCart.class);
//设置不需要转换的属性
jc.setExcludes(new String[]{"sku"});
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie c : cookies) {
String name = c.getName();
//读取购物车的key,在配置文件中保存起来了。
String cart_key = ResourcesUtils.readProp("cart_key");
if (StringUtils.equalsIgnoreCase(name, cart_key)) {
//得到cookie里边的值【JSON格式的数组】
String value = c.getValue();
//将JSON数组转成是Java对象
JSONArray ja = JSONArray.fromObject(value);
cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
//遍历购物车中的数据与库存做比较
for (EbCart cart : cartList) {
int cartQuantity = cart.getQuantity().intValue();
//根据购物车中商品的id获取详细信息
Long skuId = cart.getSkuId();
EbSku sku = skuService.selectByPrimaryKeyForDetail(skuId);
if (cartQuantity > sku.getStockInventory().intValue()) {
builder = new StringBuilder();
//这个商品的库存不足
String itemName = sku.getItem().getItemName();
builder.append(itemName);
List<EbSpecValue> specList = sku.getSpecList();
for (EbSpecValue ebSpecValue : specList) {
builder.append(ebSpecValue.getSpecValue());
}
builder.append("库存不足");
return builder.toString();
}
}
}
}
}
return "success";
}
总结
- 如果我们的数据是在后台传过去或者转换而成的,在前台上并没有做什么改变的话。那么我们可以直接使用后台的数据来对其进行操作。
- 不要老想着全部操作都由前台传递参数来进行处理!
如果您觉得这篇文章帮助到了您,可以给作者一点鼓励
