嗨,在我的javascript游戏中,当游戏启动时,我使用cookie加载一些数据
function loadData(){
cookieArray = document.cookie.split(';');
for (var i = 0; i < cookieArray.length; i++){
cookie = cookieArray[i].split('=')[0];
value = cookieArray[i].split('=')[1];
if (cookie=="currentR"){
round = value;
}
else if(cookie=="blueWins"){
bWins=value
}
else if(cookie == "redWins"){
rWins=value
}
}
}
当调用此函数时,for循环工作正常,但if语句什么都不做?我试着在cookie=cookieArray行后面放一个console.log(cookie)来测试找到了哪些cookie,它们都包括;currentR、blueWins和redWins。但我试着在每个if语句中放入一个console.log,但它没有记录任何内容,因为if语句永远不会变为true。为什么会这样,因为cookie在for循环的某个阶段等于currentR(和另一个2)。控制台没有记录任何错误,所以我不知道。如果它有帮助,我将包括保存数据然后重新加载页面的功能
function saveData(){
clearInterval(reloadG)
document.cookie = 'currentR=' + round
window.alert("Saved Data")
document.cookie = 'blueWins=' + bWins
document.cookie = 'redWins=' + rWins
location.reload(true)
}
我已经做了一些测试,我确信saveData函数运行良好。感谢
需要在document.cookie.split(";")中有空白
即
document.cookie.split("; ")
只需在末尾添加trim()
即可删除尾部空格。它适用于两侧,头部和尾部。
cookie = cookieArray[i].split('=')[0].trim();
- 试着修剪你的元素,而不是猜测它后面是否有空白;是否
- 试着让你的功能模块化
您可以使Your函数返回从cookie中读取所有数据的对象。
检查此项:
function loadData(){
var data = {};
var elements = document.cookie.split(';');
for (var i = 0; i < elements.length; i++){
var cookie = elements[i];
cookie = cookie.replace(/^s+|s+$/gm,''); // trimming whitespaces
cookie = cookie.split('=');
data[cookie[0]] = cookie[1];
}
return data;
}
var data = loadData();
alert(data.currentR, data.blueWins, data.redWins);