【问题标题】:Issue with If/Elseif Statement in for loop when using cookies (javascript) [duplicate]使用cookie(javascript)时for循环中的If / Elseif语句出现问题[重复]
【发布时间】:2016-04-03 01:04:47
【问题描述】:

嗨,在我的 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 语句永远不会变为真。为什么会这样,因为 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('; ')(添加空格)。
  • 谢谢@Xufox!现在效果很好。你能解释一下空格在做什么吗?
  • @harrison 你只用分号作为分隔符来分割它。但实际的分隔符是分号和空格。你得到" currentR" 作为字符串,而不是预期的"currentR"

标签: javascript if-statement for-loop cookies


【解决方案1】:

需要在 document.cookie.split(";") 中有一个空格

document.cookie.split("; ")

【讨论】:

    【解决方案2】:

    只需在末尾添加trim() 即可删除尾随空格。它适用于侧面、头部和尾部。

    cookie = cookieArray[i].split('=')[0].trim();

    【讨论】:

      【解决方案3】:
      1. 尝试修剪你的元素而不是猜测它后面是否有空格与否
      2. 尝试使您的函数模块化。

      您可以让您的函数返回从 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多