编程语言
首页 > 编程语言> > Javascript问题

Javascript问题

作者:互联网

首先,让我说我的教授在过去已经牢牢树立了这个问题.我们的最后一项任务要求我们在图片上方浮动链接.

您可能还说他很疯狂,因为要测试我们的页面,他要求所有功能(包括cookie)都必须通过“客户端技术”实现,即不在服务器上实现.他使用Firefox来测试页面,所以唯一的祝福就是他不在乎跨浏览器的兼容性.

话虽如此,我对我们最近的任务有疑问.我们正在使用Javascript和Cookie制作“购物车”系统,以存储要购买的商品.没关系,除了我的函数中出于某种原因向cookie添加新元素,为document.cookie分配某些东西之外,其他方法均不起作用.

您可以找到我的整个站点here .zip file download(如果您想知道“为什么要这么做?这太疯狂了!”,这是直接的任务,或者是一种尝试来减轻痛苦的方法.)

这是我有问题的代码,应该修改cookie:

var mycookies = new function (){
    var cookies = document.cookie.split(';');
    var cookie, values;
    this.items = [];
    for(var x = 0; x < cookies.length; x++){
        if(cookies[x] != ""){
            cookie = cookies[x].split('=')[0].trim()
            values = cookies[x].split('=')[1]
            values = values.split(',');
            if(!this.items[cookie]){
                this.items.push(cookie);
                this[cookie] = new function(){};
            }
            this[cookie].size = values[0];
            this[cookie].qty = parseInt(values[1]);
        }
    }
    this.render = function(){
        var values, cookies = "", cookie;
        for(var x = 0; x < this.items.length; x++){
            cookie = this.items[x];
            values = [this[cookie].size, this[cookie].qty].join(',');
            cookies += cookie + "=" + values + '; ';
        }
        return cookies;    
    }                      
    this.clear = function(){
        for(var x = 0; x < this.items.length; x++){
            delete this[this.items[x]];
        }                  
        this.items = [];
        document.cookie['expires'] = '26 Aug 1984 01:01:01 UTC;';
    }                      
    this.additem = function(){
        var i = document.forms[0].size.selectedIndex;
        if (this.items[page]){
            this[page].size = document.getElementById('size').value;
            this[page].qty = document.getElementById('qty').value;
        }                  
        else{              
            this.items.push(page);
            this[page] = new function(){};
            this[page].size = document.getElementById('size').value;
            this[page].qty = document.getElementById('qty').value;
        }
        console.log(this.render()); // For use with firebug
        document.cookie = this.render();
        console.log(document.cookie); // For use with firebug
    }
}

当我关闭时,firebug提供以下输出:

expires=12 Aug 2001 01:01:01 UTC,NaN; whitec=Small,3;
expires=12 Aug 2001 01:01:01 UTC,NaN

现在,我希望1)我的cookie过期(我通过firebug手动设置了过期时间,我的解析稍后添加了NaN,但仍然存在),以及2)cookie的值更改为this.render()

除了明显的事实,即w3规范不能保证客户端cookie行为外,我在这里还缺少什么吗? (编辑-我的意思是当页面在客户端时作为文件打开-不由服务器提供).这确实很糟糕-我尝试了多种不同的角度,并且没有“ javascript cookie”搜索或“修改JavaScript javascript”会带给我任何有用的信息.关于如何解决该问题的任何建议?

还是我应该给我的教授发送w3规范的链接,然后告诉他要求我们支持cookie客户端是愚蠢的?

解决方法:

您显然不认为document.cookie的工作原理.在变量中设置值时,一次设置一个cookie.因此,如果要设置对象中保存的所有cookie,则将遍历“ items”数组,并依次将document.cookie设置为每个名称/值对(转换为“ cookieName = cookieValue”字符串) ).

在所有现代浏览器中,这都是事实.例如,参见this Mozilla documentation page.

对代码的其他注释,因为您足够好发表它:

        cookie = cookies[x].split('=')[0].trim()
        values = cookies[x].split('=')[1]

最好只称一次“拆分”.

            this[cookie] = new function(){};

这基本上等于this [cookie] = {};将属性设置为新的空对象.

标签:cookies,firefox,client-side,javascript
来源: https://codeday.me/bug/20191208/2093047.html