/**
* 添加商品及数量到购物车cookie中,返回当前商品在cookie中的总数
*/
function AddToShoppingCar(id, num, type) {
var _num = 1;
if (num != undefined){
_num = num;
}
if (type == undefined){
alert("请设置产品种类");
return false;
}
var totalNum = _num; //总数默认为传入参数
var cookieSet = { expires: 7, path: '/' }; //设置cookie路径的
// $.cookie(cookieProductID, null, cookieSet);//清除Cookie
// var jsonStr = "[{'ProductID':'" + id + "','Num':'" + _num + "'}]"; //构造json字符串,id是商品id num是这个商品的数量
var jsonStr = "[{'ProductID':'" + id + "','Num':'" + _num + "','Type':'" + type + "'}]"; //构造json字符串,id是商品id num是这个商品的数量
console.log(jsonStr);
console.log($.cookie(cookieProductID));
if ($.cookie(cookieProductID) == null) {
$.cookie(cookieProductID, jsonStr, cookieSet); //如果没有这个cookie就设置他 // ============
var jsonObj = eval('(' + $.cookie(cookieProductID) + ')'); //如果有,把json字符串转换成对象
var findProduct = false;//是否找到产品ID,找到则为TRUE,否则为FALSH
for(var obj in jsonObj) {
if(jsonObj[obj].ProductID == id) {
console.log("数量:" + parseInt(jsonObj[obj].Num));
jsonObj[obj].Num = parseInt(jsonObj[obj].Num);
totalNum = jsonObj[obj].Num;
findProduct = true;
break;
}
}
if(findProduct == false){ //没找到,则添加
jsonObj[jsonObj.length] = new Object();
jsonObj[jsonObj.length - 1].ProductID = id;
jsonObj[jsonObj.length - 1].Num = num;
jsonObj[jsonObj.length - 1].Type = type;
}
$.cookie(cookieProductID, JSON.stringify(jsonObj), cookieSet); //写入coockie JSON需要json2.js支持
// ============
}else{
var jsonObj = eval("(" + $.cookie(cookieProductID) + ")"); //如果有,把json字符串转换成对象
var findProduct = false;//是否找到产品ID,找到则为TRUE,否则为FALSH
for(var obj in jsonObj) {
if(jsonObj[obj].ProductID == id) {
console.log("数量:" + parseInt(jsonObj[obj].Num));
jsonObj[obj].Num = parseInt(jsonObj[obj].Num) + _num;
totalNum = jsonObj[obj].Num;
findProduct = true;
break;
}
}
if(findProduct == false){ //没找到,则添加
jsonObj[jsonObj.length] = new Object();
jsonObj[jsonObj.length - 1].ProductID = id;
jsonObj[jsonObj.length - 1].Num = num;
jsonObj[jsonObj.length - 1].Type = type;
}
$.cookie(cookieProductID, JSON.stringify(jsonObj), cookieSet); //写入coockie JSON需要json2.js支持
}
return totalNum;
// alert($.cookie(cookieProductID));
}

这里使用到了 $.cookie这个插件。这个插件的代码如下:

 /**
*创建与给定的名称和值和其他可选参数的cookie。
*
* @example $ .cookie('the_cookie','the_value');
* @desc 设置cookie的值。
* @example $ .cookie('the_cookie','the_value',{到期:7,路径:'/',域名:'jquery.com“,安全:真});
* @desc 创建一个cookie与所有可用的选项。
* @example $ .cookie('the_cookie','the_value');
* @desc 创建一个会话cookie。
* @example $ .cookie('the_cookie',NULL);
* @desc 由空传递的值删除的cookie。
*
* @param 参数字符串名称的Cookie的名称。
* @param 参数字符串值的cookie的值。
* @param 参数对象的选择对象文本包含键/值对提供可选的cookie的属性。
* @option 号码|日期到期一个整数从现在起指定到期日在天或Date对象。
* 如果指定了负值(例如,在过去的日期),该cookie将被删除。
* 如果设置为空或省略,cookie将是一个会话cookie并不会被保留
* 当在浏览器退出。
* @option 字符串路径的Cookie路径属性附加伤害值(默认值:页面的路径创建的cookie)。
* @option 字符串域的cookie域属性的值(默认值:页面的域名创建的cookie)。
* @option 布尔安全的,如果属实,将Cookie的安全属性将被设置和cookie的传输将
* 需要一个安全协议(如HTTPS)。
* @type 未定义
*
* @name $ .cookie
* @cat 插件/曲奇
* @author 克劳斯Hartl/klaus.hartl@stilbuero.de
*/ /**
* Get the value of a cookie with the given name. 获取给定名字的cookie的值。
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie. 获取cookie的值。
*
* @param String name The name of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};

jQuery基于json与cookie实现购物车的方法的更多相关文章

  1. 基于Jquery+Ajax+Json+存储过程 高效分页

    在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...

  2. 基于Cookie的购物车

    var Cookies = {}; Cookies.set = function (name, value) { var argv = arguments; var argc = arguments. ...

  3. 基于jquery的json转table插件jsontotable

    分享一款基于jquery的json转table插件jsontotable.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="container ...

  4. jQuery对json快速赋值

    jQuery对json快速赋值,重点在于将input的id取跟JSON同样的名称. <!DOCTYPE html> <html> <head lang="en& ...

  5. 用jquery解析JSON数据的方法以及字符串转换成json的3种方法

    用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是 json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject ...

  6. [转]jquery 对 Json 的各种遍历

    原文地址:http://caibaojian.com/jquery-each-json.html 概述 JSON(javascript Object Notation) 是一种轻量级的数据交换格式,采 ...

  7. jQuery.parseJSON(json) 使用方法

    jQuery.parseJSON(json) 接受一个JSON字符串,返回解析后的对象. 返回值:String传入一个畸形的JSON字符串会抛出一个异常.比如下面的都是畸形的JSON字符串:{test ...

  8. JQuery 获取json数据$.getJSON方法的实例代码

    这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...

  9. jQuery基于ajax实现星星评论代码

    本文实例讲述了jQuery基于ajax实现星星评论代码.分享给大家供大家参考.具体如下: 这里使用jquery模仿点评网的星星评论功能,Ajax评论模块,鼠标点击星星即可评价,下边是分数,可以点击后给 ...

随机推荐

  1. Web for pentester_writeup之LDAP attacks篇

    Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...

  2. 学习笔记42_SpringMVC

    SpringMVC中,Global.axas发生变化,其中 1.原来是 public class MvcApplication:System.web.HttpApplication 现在是 publi ...

  3. 关于多线程start()方法原理解读

    1.为什么启动线程不用run()方法而是使用start()方法 run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样 而start()是创建线程等一系列工作,然后自己调用run里面的 ...

  4. 在mac上用parallels创建双windows虚拟机调试windows驱动

    先创建两个windows 7 虚拟机,一个装windbg作为调试机,一个被调试 1 调试机 1 先装windbg https://developer.microsoft.com/en-us/windo ...

  5. CSP-S模拟57

    这次的T1是来送温暖的. T2T3挺神的. T1. 不会 T2. 容斥,挺神的 T3. 考场上被卡常卡掉10分让我很难受.....(虽然说$O(n)$过$1e8$本来就不太行) 考场上:疯狂化简式子, ...

  6. canvas线条实践之运动的正方形

    原理说明: 1.通过rect实现正方形的绘制: 2.save保存canvas面板的保存,restore回复保存的canvas面板到初始状态: 3.translate用于改变canvas坐标的起始位置: ...

  7. C#动态多态性的理解

    C#动态多态性是通过抽象类和虚方法实现的. 抽象类的理解 用关键字abstract创建抽象类,用于提供接口的部分类的实现(理解:接口不能提供实现,抽象类中可以有实现,接口与抽象类一起使用,可以达到父类 ...

  8. windows中修改IP映射的位置

    windows中修改IP映射的位置 置顶 2018年08月05日 14:42:44 wangxiaolong0 阅读数:1473   在安装linux之后,发现windows不能通过映射来访问linu ...

  9. 两张图弄懂函数的递归(以golang为例)

    函数递归时要遵守的原则: 执行一个函数时,就要创建一个新的受保护的独立空间(新函数栈) 函数的局部变量是独立的,不会相互影响: 递归必须向退出递归的条件逼近,否则就会无限递归: 当一个函数执行完毕,或 ...

  10. 单元测试JUnit案例

    被测试模块 package packagedemo; public class Largest { public int minimal(int [] array1) { int index = 0 ...