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