2015-04-08 4 views
0

Я получаю довольно неприятную проблему с JavaScript и Cookies на кэшированных страницах.Javascript - проблема с кешированием и печеньем

я получил следующий 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(); 
    } 

{{Lang}} заменен с тем же куки на внутреннем интерфейсе с PHP.

$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 Dev достаточно ясно говорят, что печенье lang установлен на «EN», а не «FR».

Есть ли способ вокруг этой проблемы кеширования?

+0

Почему вы считаете, что страница кэшируется? Вы проверили заголовки? – zerkms

+0

@zerkms Поскольку он не выполняет новый PHP-код, который заставил меня прибегнуть к этому решению JS, которое, похоже, тоже не работает. Но я хочу, чтобы это решение работало из-за интереса к проблеме и способа ее решения в будущем. –

+0

«Потому что он не выполняет новый PHP-код» --- откуда вы его знаете? Вы проверили журнал доступа к серверу? – zerkms

ответ

1

Не равно сравнение в JS является !=, так

getCookie("lang") != "FR" 
1

Метод перезагрузки принимает логический флаг, указывающий обновление силового кэша. Так что попробуйте:

document.reload(true); 
+0

Ха, это полезно для решения другого вопроса, который у меня есть, но не под рукой. Вопрос заключается в заявлении IF. Он даже не добирается до этой линии. –

+0

«это полезно для решения другой проблемы» --- это не так. Вы не «решаете» проблему, вы притворяетесь, что ее нет. Есть разница. – zerkms

Смежные вопросы