我在缓存页面上遇到了一个非常令人沮丧的JavaScript和Cookie问题。
我得到了以下JS代码:
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 "";
}
if (!getCookie("lang") == "{{Lang}}"){
document.reload();
}
使用PHP将 {{Lang}}
替换为后端的相同cookie。
$template = str_replace("{{Lang}}", $lang, $template);
但这并不是真正相关的,因为那部分按预期工作。
问题是当用户访问缓存页面时。
前面提到的JS变成了
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 "";
}
if (!getCookie("lang") == "FR"){
document.reload();
}
问题在于,即使Chrome开发工具明确说明Cookie lang
设置为&#34; EN&#34;,而不是&#34; FR&#34;
是否存在解决此缓存问题的方法?
答案 0 :(得分:1)
reload方法接受一个指示强制缓存刷新的布尔标志。所以试试:
document.reload(true);
答案 1 :(得分:1)
JS中的不相等比较是!=
,所以
getCookie("lang") != "FR"