(cookie)网上商城收索记录实现

1. cookie中只能储存字符串,麻烦告知下用什么方式可以转换为字符串
并且需要转换回来。

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
 
var last=obj.toJSONString(); //将JSON对象转化为JSON字符
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符

2.Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态。但是当你的站点有一个以上的域名时就会出现问题了。在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。
跨二级域名

  我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain参数domain=test1.com。 以asp.net为例 代码如下:
    
HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com");
cookie.Domain = "test1.com";
cookie.Path = "/";
Response.Cookies.Add(cookie);
跨顶级域名

  如果我不是二级域名而是完全在不同顶级域名中,例如 www.test1.com 所在的web应用程序创建了一个cookie,想要在 www.test2.com 或其二级域名的应用程序中访问,改怎么办呢?我们知道靠常规反的方法是访问不了的,关键我们就是看看有没有方法可以访问。事实是Cookie可以在一定条件下跨域,而不是随心所欲的实现跨域。

  我们来做个测试,看看两个站点 www.test1.com 和 www.test2.com 如何实现cookie跨域访问。 按照常规我们需要有2个顶级域名,并且有DNS服务器才能够配置域名,否则我们是无法验证的,但是这里我们也没有必要那么麻烦,我们可以通过修改hosts文件来模拟。在 c:\windows\system32\drivers\etc 中有 hosts文件,在末尾添加上

127.0.0.1    www.test1.com
127.0.0.1    www.test2.com

两行,就可以将本机用上面的域名访问本机回环地址了。我们只需要在IIS上部署一套程序,ip为本机回环地址,用两个域名分别访问就可以了。

2 简单cookie方法

function getCookie(name)

{

    var cookieValue = "";

    var search = name + "=";

    if (document.cookie.length > 0)

    {

        offset = document.cookie.indexOf (search);

        if (offset != -1)

        {

            offset += search.length;

            end = document.cookie.indexOf (";", offset);

            if (end == -1)

                end = document.cookie.length;

            cookieValue = unescape (document.cookie.substring (offset, end))

        }

    }

    return cookieValue;

}

<script>

var name = "_system_version";

var days = 7;

var version=getCookie("_system_version");

if(version =="2.0")

{

 version = "3.0";

}

var path = "/";

var expires = new Date();

expires.setTime(expires.getTime() + days * 3600000 * 24);

path = path == "" ? "" : ";path=" + path;

var _expires = (typeof days) == "string" ? "" : ";expires=" + expires.toUTCString();

document.cookie = name +"=" + version + _expires + path;

</script>


网上商城收索记录实现


/** * 增加搜索记录,放入cookie中

 */
function addRecords(searchParams)
{
var name ="supermarket_searchrecords";
var cookieValue = $.cookie(name);
var newCookie = "";
var breedIdAndName = "";

if(searchParams["breedInfos"] !="" && typeof(searchParams["breedInfos"]) !="undefined")
{
    var breedInfos = searchParams["breedInfos"];

    for ( var breedId in breedInfos) {
        var breedName = breedInfos[breedId];
        if (breedName != "") {
            if (breedIdAndName == "") {
                breedIdAndName += breedId +"-"+breedName;
            } else {
                breedIdAndName += "_" + breedId +"-"+breedName;
            }
        }
    }
}

//添加或更改的最后一条的记录信息,记录以下收索字段
var addRecord = "keyword:"+ (typeof(searchParams["keyword"])=="undefined" ? "" : searchParams["keyword"])+";"
+ "breedIds:"+(typeof(searchParams["breedIds"]) =="undefined" ? "":searchParams["breedIds"])+";"
+ "breedInfos:"+breedIdAndName+";"
+ "materials:"+(typeof(searchParams["materials"]) =="undefined" ? "": searchParams["materials"])+";"
+"specs:"+(typeof(searchParams["specs"]) =="undefined" ? "": searchParams["specs"])+";"
+ "cityId:"+(typeof(searchParams["cityId"])=="undefined" ? "":searchParams["cityId"])+";"
+ "cityName:"+(typeof(searchParams["cityName"]) =="undefined" ? "": searchParams["cityName"])+";"
+ "brands:"+(typeof(searchParams["brands"]) =="undefined" ? "": searchParams["brands"])+";"
+ "warehouses:"+(typeof(searchParams["warehouses"]) =="undefined" ? "":searchParams["warehouses"])+";"
+ "startPrice:"+(typeof(searchParams["startPrice"]) =="undefined" ? "": searchParams["startPrice"])+";"
+ "endPrice:"+(typeof(searchParams["endPrice"]) =="undefined" ? "": searchParams["endPrice"])+";";

if (cookieValue != null && cookieValue != "")
{
    var uneacapeCookieValue = unescape(cookieValue);  // 解码

    //操作收索记录,如果已经存在了,不再添加或改变
    if(uneacapeCookieValue.indexOf(addRecord) == -1)
    {
        var records = uneacapeCookieValue.split("|");
        var size = records.length;
        
        var lastRecords = records[records.length - 1].split(";");//最近的一条cookie
        var recordParams ={};//把cookie中的最后一条转换成对象
        var addFlag = false;//默认false,不添加只是改变最后一条
        //减一因为最后一个对象也有;(分号)
        for(var i=0;i<lastRecords.length-1;i++)
        {
            var record = lastRecords[i].split(":");
            recordParams[record[0]] = record[1];
        }

         if (searchParams != null && recordParams != null)
        {
            //如果只是添加条件,在最近一条cookie中赋值,即改变最后一条Cookie,如果条件变化包括删除了某个条件,则在原有cookie基础上新加记录
            //key1:value1;key2:value2;...key9:value9;|key1:value1;key2:value2;...key9:value9;
            for ( var pro in recordParams)
            {
                //breedInfos变化时,breedIds也会变化,不需要根据它判断
                if(    recordParams[pro] !="" && recordParams[pro] !="undefined" && pro !="breedInfos")
                {
                    //不为空的,就要判断它对应的值有没有变化
                    if(recordParams[pro] !=searchParams[pro])
                    {
                        addFlag = true;
                        break;
                    }
                 }
             }

            //只存储最近的n(目前n=5)条cookie,大于n-1时
            if(size > 4)
            {
                //true,n——>n-1,全部向左平移一个,即删除第一个,最后一个添加即第n个添加;
                if(addFlag)
                {
                    records.shift();
                    records.push(addRecord);
                    newCookie = records.join("|");
                }
                //false 改变最后一个,即第n个的值;
                else
                {
                    records.pop();
                    records.push(addRecord);
                    newCookie = records.join("|");
                }
            }
            //cookie条数小于n时
            else
            {
                //true添加一条
                if(addFlag)
                {
                    records.push(addRecord);
                    newCookie = records.join("|");
                }
                //改变最后一条逻辑
                else
                {
                    records.pop();
                    records.push(addRecord);
                    newCookie = records.join("|");
                }
             }
          }
    }
    else
    {
        newCookie = uneacapeCookieValue;
    }
}
else
{
    // 如果不存在Cookie 创建
    newCookie = addRecord;
}

//添加cookie
$.cookie(name, escape(newCookie), {expires: 30, domain:'.banksteel.com', path: '/'});
//cookie变化,刷新收索记录
showSearchHistory();
}

/**
 * 删除某条搜索记录
 */
function removeRecord(revNum)
{
    var name ="supermarket_searchrecords";
    var cookieValue = $.cookie(name);

    if (cookieValue != null && cookieValue != "")
    {
        var uneacapeCookieValue = unescape(cookieValue);  // 解码
        var records = uneacapeCookieValue.split("|");
        var newRecords ="";

        //当revNum等于0时与空相等,所以!==;
        if(records != null && revNum !=="")
        {
            records.splice(revNum, 1);
            newRecords = records.join("|");
        }    

        var newCookie = newRecords;
        //添加cookie
        $.cookie(name, escape(newCookie), {expires: 30, domain:'.banksteel.com', path: '/'});
        //刷新收索记录
        showSearchHistory();    
    }    
}

/**
 *展示收索记录
 */
function showSearchHistory(){
var name ="supermarket_searchrecords";
var cookieValue = $.cookie(name);
$("#hisul").empty();
var title = "<li class=\"tit\">搜索记录</li>";
$("#hisul").append(title);

if (cookieValue != null && cookieValue != "")
{
    var uneacapeCookieValue = unescape(cookieValue);
    var records = uneacapeCookieValue.split("|");

    //倒序展示
    for(var j=records.length-1;j>=0;j--)
    {    
        var recordParams ={};//每次生成一组新的对象集
        var perRecord = records[j].split(";");
        var li = "<li class='con' id=\"hisli_" + j + "\"></li>";
        var a1 ="<a href=\"javascript:;\" class=\"a1\" id=\"hisa1_" + j +"\"></a>";
        var a2 ="<a href=\"javascript:;\" class=\"con\" id=\"hisa2_" + j +"\">删除</a>";
        //var a2 ="<span class=\"a2\" id=\"hisa2_" + j +"\">删除</span>";
        var recordSpan ="";
        var breedparam ={};

        for(var i=0;i<perRecord.length-1;i++)
        {
            var record = perRecord[i].split(":");
            //把cookie中的每一条转换成对象
            if(record[1]=="undefined")
            {
                recordParams[record[0]] = "";
            }
            else
            {
                recordParams[record[0]] = record[1];
            }

            //整合收索记录字段
            if(record[1] != "" && record[1] != "undefined" && record[0] != "breedIds" && record[0] != "cityId")
            {   
                //处理品名字段
                if(record[0]=="breedInfos")
                {
                    var breedNames = "";
                    var breedIdAndNames = record[1].split("_");
                    
                    for(var n=0;n<breedIdAndNames.length;n++)
                    {
                        var perbreedId = breedIdAndNames[n].split("-")[0];
                        var perbreedName = breedIdAndNames[n].split("-")[1];
                        breedparam[perbreedId] = perbreedName;
                        recordParams["breedInfos"] = breedparam;

                        if(breedNames =="") {
                            breedNames = perbreedName;
                        }else{
                            breedNames = breedNames +","+perbreedName;
                        }
                    }

                    //每两个字段间有加号
                    if(recordSpan=="")
                    {
                        recordSpan = breedNames;
                    }
                    else
                    {
                        recordSpan = recordSpan +"<span>+</span>"+breedNames;
                    }
                }
                else if(record[0]=="brands" || record[0]=="keyword" || record[0]=="breedNames" || record[0]=="warehouses" || record[0]=="specs")
                {
                    if(recordSpan=="")
                    {
                        recordSpan = unescape(record[1]);
                    }
                    else
                    {
                        recordSpan = recordSpan +"<span>+</span>"+ unescape(record[1]);
                    }
                }
                else
                {
                    if(recordSpan=="")
                    {
                       recordSpan = record[1];
                    }
                    else
                    {
                        recordSpan = recordSpan +"<span>+</span>"+ record[1];
                    }
                }
            }
        }

        if(recordSpan !="")
        {
            $("#hisul").append(li);
            $("#hisli_"+j).append(a1);
            $("#hisli_"+j).append(a2);
            $("#hisa1_"+j).append(recordSpan);
            $("#hisa1_"+j).attr("onclick", "searchByParam("+JSON.stringify(recordParams)+");");
            $("#hisa2_"+j).attr("onclick", "removeRecord("+j+");");
        }
    }

  }

}


购物车cookie实现


/**
 * 获取cookie值
 * @param name
 * @returns {String}
 */
function getCookie(name) {
    var cookieValue = "";
    var search = name + "=";
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1)
                end = document.cookie.length;
            cookieValue = unescape(document.cookie.substring(offset, end))
        }
    }
    return cookieValue;
}
/**
 * 获取资源Id
 */
function changeItem() {
    var ids = "";
    obj = document.getElementsByName("resourceId");
    for (i = 0; i < obj.length; i++) {
        if (ids == "") {
            ids = obj[i].value;
        } else {
            ids = ids + "," + obj[i].value;
        }
    }
    $("#ids").val(ids);
    
    var id = ids.split(",");
    var averageQty = "";
    var items = "";
    var qtyAll = "";
    var amt = "";
    for(var i=0;i<id.length;i++)
    {
        averageQty = $("#averageQty_"+id[i]).text().split(":")[1];
        items = $("#"+id[i]).val();
        amt = $("#amt_"+ id[i]).text().split(":")[1];
        qtyAll = parseFloat(averageQty) * items;
        $("#qty_"+id[i]).text(parseFloat(qtyAll).toFixed(4));
        amt = amt * qtyAll;
        $("#amtAll_"+id[i]).text(parseFloat(amt).toFixed(2));
    }    
}

/** 删除一行 */
function deleteCurrentRow(obj, id) {

    var idsDel = "";
    var resourceIdDel = getCookie("_cart_resource_ids");
    var resIdsDel = resourceIdDel.split("|");
    for (var i = 0; i < resIdsDel.length; i++) {
        if (resIdsDel[i] != id) {
            if (idsDel == "") {
                idsDel = resIdsDel[i];
            } else {
                idsDel = idsDel + "|" + resIdsDel[i];
            }
        }
    }

    var name = "_cart_resource_ids";
    var days = 7;

    var value = idsDel;
    var path = "/";
    var expires = new Date();
    expires.setTime(expires.getTime() + days * 3600000 * 24);
    path = path == "" ? "" : ";path=" + path;
    var _expires = (typeof days) == "string" ? "" : ";expires="
            + expires.toUTCString();
    var domain = ".banksteel.com";
    domain = domain == "" ? "" : ";domain=" + domain;
    document.cookie = name + "=" + value + _expires + path + domain;

    var idMap = ""
    var ids = $("#ids").val();

    var idList = ids.split(",");
    for (var i = 0; i < idList.length; i++) {
        if (idList[i] != id) {
            if (idMap == "") {
                idMap = idList[i];
            } else {
                idMap = idMap + "," + idList[i];
            }
        }
    }
    $("#ids").val(idMap);

    var tr = obj.parentNode.parentNode;
    var tbody = tr.parentNode;
    var ids = "";

    if (tbody.children.length > 1) {
        tbody.removeChild(tr);
        if (tbody.children.length == 1) {
            tbody.remove();
        }

        var resIds = $("#ids").val();
        var eachIds = resIds.split(",");
        for (var i = 0; i < eachIds.length; i++) {
            if (eachIds[i] != id) {
                if (ids == "") {
                    ids = eachIds[i];
                } else {
                    ids = ids + "," + eachIds[i];
                }

            }
        }
        $("#ids").val(ids);
    }

}

/** 删除一行 */
function newDeleteCurrentRow(obj, id) {

    var idsDel = "";
    var resourceIdDel = getCookie("_cart_resource_ids");
    var resIdsDel = resourceIdDel.split("|");
    for (var i = 0; i < resIdsDel.length; i++) {
        if (resIdsDel[i] != id) {
            if (idsDel == "") {
                idsDel = resIdsDel[i];
            } else {
                idsDel = idsDel + "|" + resIdsDel[i];
            }
        }
    }

    var name = "_cart_resource_ids";
    var days = 7;

    var value = idsDel;
    var path = "/";
    var expires = new Date();
    expires.setTime(expires.getTime() + days * 3600000 * 24);
    path = path == "" ? "" : ";path=" + path;
    var _expires = (typeof days) == "string" ? "" : ";expires="
            + expires.toUTCString();
    var domain = ".banksteel.com";
    domain = domain == "" ? "" : ";domain=" + domain;
    document.cookie = name + "=" + value + _expires + path + domain;

    var idMap = ""
    var ids = $("#ids").val();

    var idList = ids.split(",");
    for (var i = 0; i < idList.length; i++) {
        if (idList[i] != id) {
            if (idMap == "") {
                idMap = idList[i];
            } else {
                idMap = idMap + "," + idList[i];
            }
        }
    }
    $("#ids").val(idMap);

    var tr = obj.parentNode.parentNode;
    var tbody = tr.parentNode;
    var ids = "";

    if (tbody.children.length > 1) {
        tbody.removeChild(tr);
        if (tbody.children.length == 1) {
            tbody.parentNode.parentNode.remove();
        }

        var resIds = $("#ids").val();
        var eachIds = resIds.split(",");
        for (var i = 0; i < eachIds.length; i++) {
            if (eachIds[i] != id) {
                if (ids == "") {
                    ids = eachIds[i];
                } else {
                    ids = ids + "," + eachIds[i];
                }

            }
        }
        $("#ids").val(ids);
    }

}

/**
 * 修改件数
 *
 * @param obj
 */
function change(obj) {
    var text = $("#items_" + obj).text();
    var items = text.split(":");
    var textQty = $("#averageQty_" + obj).text();
    var qtys = textQty.split(":");

    var amt = $("#amt_" + obj).text().split(":")[1];

    var money = (1 * qtys[1] * amt).toFixed(2);

    var textVal = $("#" + obj).val();
    var dpattern = /^[0-9]*[1-9][0-9]*$/;
    if (textVal != "") {
        if (!dpattern.test(textVal)) {
            $("#" + obj).val("1");
            alert("件数是正整数 !");
            $("#qty_" + obj).text(parseFloat(qtys[1]).toFixed(4));
            $("#amtAll_" + obj).text(money);

            return;
        }
    }

    if (parseInt(textVal) > parseInt(items[1])) {
        $("#" + obj).val("1");
        alert("已超过挂牌件数,最多购买" + items[1] + "件。");
        $("#qty_" + obj).text(qtys[1]);
        $("#amtAll_" + obj).text(money);
    } else {
        var averageQty = qtys[1];
        var qtyAll = (averageQty * textVal).toFixed(4);

        $("#qty_" + obj).text(qtyAll);

        var amtAll = (amt * qtyAll).toFixed(2);
        $("#amtAll_" + obj).text(amtAll);
    }

}

/**
 * 显示总重量
 */
function qtyAll() {
    var qtyAll = "";

    var obj = document.getElementsByName("resourceId");
    if (obj.length == 0) {
        $("#qtyText").text("0.0000");
    } else {
        for (i = 0; i < obj.length; i++) {
            var qty = $("#qty_" + obj[i].value).text();
            if (qtyAll == "") {
                qtyAll = parseFloat(qty);
            } else {
                qtyAll = parseFloat(qtyAll) + parseFloat(qty);
            }
        }

        $("#qtyText").text(parseFloat(qtyAll).toFixed(4));
    }
}

/**
 * 显示总金额
 */
function amtAll() {
    var amtAll = "";

    var obj = document.getElementsByName("resourceId");
    if (obj.length == 0) {
        $("#amtText").text("0.00");
    } else {
        for (i = 0; i < obj.length; i++) {
            var amt = $("#amtAll_" + obj[i].value).text();
            if (amtAll == "") {
                amtAll = parseFloat(amt);
            } else {
                amtAll = parseFloat(amtAll) + parseFloat(amt);
            }
        }

        $("#amtText").text(parseFloat(amtAll).toFixed(2));
    }

}

/**
 * 提交订单
 */
function orderSub(obj) {
    var ids = $("#ids").val();
    if (ids == "") {
        alert("没有可提交的订单!");
        return;
    }
    var idMap = ""
        var idList = ids.split(",");
    for (var i = 0; i < idList.length; i++) {
        var items = $("#" + idList[i]).val();
        if (items == "") {
            alert("件数不能为空!");
            return;
        }
        if (idMap == "") {
            idMap = "{resourceId:" + idList[i] + ",items:" + items + "}";
        } else {
            idMap = idMap + "," + "{resourceId:" + idList[i] + ",items:"
            + items + "}";
        }
        
    }
    if (confirm("确定提交订单吗?")) {
        idMap = "[" + idMap + "]";

        $("input[name='resourceIds']").val(idMap);
        $("#resourceForm").submit();
    }

}
function deleteConOld(obj, id) {
    if (confirm("确定要删除数据吗")) {
        deleteCurrentRow(obj, id);
        qtyAll();
        amtAll();

    }
}

function deleteConNew(obj, id) {
    if (confirm("确定要删除数据吗")) {
        newDeleteCurrentRow(obj, id);
        qtyAll();
        amtAll();

    }
}


猜你喜欢

转载自blog.csdn.net/jakeswang/article/details/50578061