我的教授说我在已经评分的代码的greetUser函数中有一个逻辑错误。代码基于文本中的示例,因此我对确定逻辑感到震惊。这是她给我的信息:
greetUser
函数没有正确地为返回的访问者读取cookie。 检查readCookie
函数中的这行代码 - 它有一个逻辑错误。
这是readCookie
函数:
function readCookie(name) {
var nameEQ = name + "=";
var x = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = cookies[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
这是greetUser
函数:
function greetUser(){
userName = readCookie("rock_username");
if(userName)
alert("Hello " + userName + ", I missed you.");
else
alert("Hello, I am your pet rock");
}
从我的新手眼中看,这对我来说都是合乎逻辑的,就像在文本示例中一样。 任何建议
答案 0 :(得分:2)
var x = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = cookies[i];
您正在迭代“ca”(这是什么?)而不是“x”,然后您正在阅读cookies
数组? 3个不同的变量,意义相同?
我将解释:var x = document.cookie.split(';');
将存储在document.cookie
中的字符串拆分为一个数组,该数组将有效地保存在x
参数中。
然后,在for()
构造内部,您正在增加i
,直到在您刚刚分割字符串时创建的数组中找到的元素数量。这样,每次你c = x[i]
; (正确版本)您将获得用{;'分割的document.cookie
字符串的下一部分字符。
这允许您处理document.cookie
的所有有趣部分,根据定义,它们是用户代理(浏览器)cookie。在您的示例中,您正在迭代cookie以查找特定的cookie - “名称”cookie,以便将其打印为用户的问候语。