javascript cookie 更新全局计数变量导致浏览器内存过载?没有错误或日志消息

问题描述

我正在尝试使用我网站用户完成操作的总次数来更新 cookie。当他们重新加载应用程序时,我不希望整个事情都重置,所以我试图创建一个系统,将他们完成操作的总次数存储为 cookie,并作为 cookie 提供给应用程序如果他们重新加载页面,则为计数的认值。这样他们就可以从上次中断的地方恢复应用程序。我试图通过以下方式做到这一点:

  1. 函数check cookie count”为 count 分配一个新值(认为 1),声明如果存在先前的 cookie 用户 C,则将该值分配给计数。 -

    if (userCNT != "") {count = userCNT;}

  2. 点击启动应用程序的按钮时调用函数(位于 start 函数中)

  3. 当应用程序运行一次时,update 函数会运行,该函数会运行其他几个函数包括使用全局计数的当前值更新 cookie - setCookie("userC",count,365);

我已经设法让网站保留 cookie(第一次使用 cookie)...但是,当我在保留计数 cookie 后重新加载它时,它就停止工作了。只有在 checkcookieCount 函数运行后才会发生这种崩溃,然后根据我所知道的,当它显示count = userCNT 时。当我查看 chrome/firefox 开发人员任务管理器时,我发现该页面正在消耗大量内存。我不知道这里发生了什么,也没有看到任何错误消息来指明方向。这是相关的(我认为)代码。我的猜测是我正在做一些在那里创建无限循环的事情,而我对饼干世界的无知导致我犯了一个错误。有什么想法吗?

function setCookie(cname,cvalue,exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
  var expires = "expires="+d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i = 0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charat(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length,c.length);
    }
  }
  return "";
}

    function checkCookieCount() {
  var userCNT = getCookie("userC");
  if (userCNT != "") {
    alert("Your PrevIoUs Count: " + userCNT);
    // make global count update
    count = userCNT; <-- THIS IS WHATS CAUSING THE PROBLEM  
  } else {
    kount = count;
    if (kount != "" && kount != null) {
      setCookie("userC",kount,365);
    }
  }
}

    
function start() {
  username = document.getElementById("user_PID").value;
  alert("your PID is " + username);

  checkCookieName();
  checkCookieCount();
  
  var oneMin = 60 * 60,display = document.querySelector('#time');
  startTimer(oneMin,display);

  jsoner();

  while (count > 1);
  modal.style.display = "none";
};

var count = 1;

此处存在各种其他功能,用于运行调查。根据页面的总 window.count 进行几次操作。其他最相关的部分位于底部

function knxer() {
  if (window.count === 1) {
    return knx = "kn" + ((username*1) + 1);
    console.log("knx:" + knx);
  } else {
    return knx = ("kn" + ((username*1) + (count*1)));
    console.log("knx:" + knx);
  }
};

  window.survey = new Survey.Model(json);
  survey.surveyPostId = "7b6c29dc-4771-49e1-8403-16591350d697";

  survey
    .onComplete
    .add(function(result) {
      var PID = username
      var results = PID + ":\n" + JSON.stringify(result.data,null,3);
      window.count++;

      survey.sendResult('3cc0bc85-2253-412d-a56c-cc7b82260de3');
      update();
      survey.clear();
      survey.render();
    });

  $("#surveyElement").Survey({
    model: survey
  });

}

function update() {
  setCookie("userC",365);
  jsoner();
  document.getElementById("kounter2").innerHTML = "Images Tagged: " + (count - 1);
}

我已尝试删除此处的大部分不相关代码,但如果您想查看整个站点的运行情况(重现错误),您可以查看它 here,或者完整存储库 here

更新 2:经过进一步调查,主要问题似乎是与 cookie 相关的计数。 0 和 1 的值有效,但超过此值的任何值都会导致页面崩溃。在这一点上,我已经尝试了几种不同的方法。我几乎可以肯定有一些关于 Javascript 的规则我误解了 - 我已经清楚地创建了一个循环 (userC cookie -> count -> increment count -> userC cookie。 .. 但我不明白这怎么可能是个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)