我有这段代码
$(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;
}
答案 0 :(得分:1)
你的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);
}