javascript意外令牌COOKIE

时间:2011-12-04 19:07:33

标签: php javascript jquery

所以我有这个问题,我正在使用index.inc.php文件设置一个cookie,这是必须的。

使用服务器端语言设置cookie的问题是它不会对第一次加载生效。 javascript位于模板文件index.tpl(使用XTemplate)上,COOKIE2和COOKIE3是在PHP上定义的值,它们是cookie值,但在第一次加载时,始终为空。

var ligarei = getCookie('ligarei');
if(ligarei != "nao"){
    var cookie2 = {COOKIE2};
    var cookie3 = {COOKIE3};
    var timeout = cookie3 - cookie2;
    var timeout2 = 60 - timeout;

    $(document).ready(function() {
        if(timeout > 60){
            popthat();
        }
        else if(timeout < 60){
            setTimeout("popthat()", timeout2 * 1000);
        }

    });
}

第一个getCookie函数没问题,如果它为空或null无关紧要,但问题出在var cookie2和cookie3上,编译后的结果是:

var cookie = ; 

这给了我一个意外的令牌错误。

有关如何解决此问题的任何提示?

非常感谢。

3 个答案:

答案 0 :(得分:2)

假设您的问题是因为您实际上无法更改php代码以符合简单的空检查。

var ligarei = getCookie('ligarei');
if(ligarei != "nao"){
    var cookie2 = {COOKIE2} + 0; // or + "" if it is a string
    var cookie3 = {COOKIE3} + 0;
    var timeout = cookie3 - cookie2;
    var timeout2 = 60 - timeout;

    $(document).ready(function() {
        if(timeout > 60){
            popthat();
        }
        else if(timeout < 60){
            setTimeout("popthat()", timeout2 * 1000);
        }

    });
}

答案 1 :(得分:0)

使用客户端JS代码来读取cookie。

在$(document).ready函数中,您可以从docmuent.cookies对象中读取Cookie。这里有一个例子,重新说明如何做到这一点:

http://www.w3schools.com/js/js_cookies.asp

此外,还有一些第三方js库可以简化此任务,例如:饼干罐:

http://cookiejar.sourceforge.net/

如果你这样工作,你就不需要在你的代码中加入没有设置cookie的情况(它实际上是设置的,但是当服务器端代码运行时却没有。

答案 2 :(得分:0)

Cookie始终是字符串。我认为你只是错过了引号:

var cookie2 = "{COOKIE2}";
var cookie3 = "{COOKIE3}";

无论如何,您使用一种语言(PHP)来生成另一种语言(JavaScript)的源代码,因此您必须非常小心地遵守目标语言的语法规则。在PHP中,通常的技巧是使用json_encode()输出值。 E.g:

<?php
$value = 'Foo "bar"; test';
echo json_encode($value);

...打印一个随时可用的JavaScript字符串,引号和所有:

"Foo \"bar\"; test"

最后但并非最不重要的一点是,使用服务器端语言设置cookie并不重要,正如此片段所示:

<?php

setcookie('current-time', date('H:i:s'));

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
window.onload = function(){
    alert("Cookies: " + decodeURIComponent(document.cookie));
};
</script>
</head>
<body>
</body>
</html>