2

我有这个代码

$(document).ready(function () {
    var d = new Date();
    var newMinutes = d.getTimezoneOffset();

    var storedMinutes = getCookieValue("tzom");

    if (newMinutes != storedMinutes) {
        setCookie("tzom", newMinutes);

        alert("new" + newMinutes);
        alert("stored" + storedMinutes);

        document.location.reload(true);
    }
});

我在这里要做的是检查 cookie 中的时区值,看看它是否与用户设置的当前时区不同。如果我的用户访问该站点并更改他们的时区然后转到另一个页面,就会发生这种情况。如果有差异,那么我使用新值设置 cookie 并重新加载页面。问题是当我重新加载页面时,它仍然显示时区存在差异,因此页面在无限循环中重新加载。如果我能够在此无限循环期间以某种方式单击不同的页面,则循环停止。

实际上,通过重新加载,我注意到的是,在更改我的时区后,如果我点击一个页面,则报告时区不同,如果我再点击第二个页面,则报告时区仍然是不同,只有在第三页点击时才没有报告 cookie 不同。

这里有什么问题?

编辑

其余代码在这里

function getCookieValue(c_name) {
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1) {
        c_start = c_value.indexOf(c_name + "=");
    }
    if (c_start == -1) {
        c_value = null;
    }
    else {
        c_start = c_value.indexOf("=", c_start) + 1;
        var c_end = c_value.indexOf(";", c_start);
        if (c_end == -1) {
            c_end = c_value.length;
        }
        c_value = unescape(c_value.substring(c_start, c_end));
    }
    return c_value;
}

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}
4

1 回答 1

2

您的 setCookie 函数需要 3 个参数,而不是 2 个。

尝试将您的代码更改为:

if (newMinutes != storedMinutes) {
    setCookie("tzom", newMinutes,365); //cookie will persist for 365 days

    alert("new" + newMinutes);
    alert("stored" + storedMinutes);

    setTimeout("document.location.reload(true)",1000);
}
于 2013-09-27T16:36:07.493 回答