0

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

  1. 让函数“ check cookie count”为(默认为 1)分配一个新值,count说明如果存在先前的 cookie userC,则将该值分配给 count。-

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

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

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

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

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", count, 365);
  jsoner();
  document.getElementById("kounter2").innerHTML = "Images Tagged: " + (count - 1);
}

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

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

4

0 回答 0