所以我有这个问题,我使用index.inc.php文件来设置cookie,这是必须的。
使用服务器端语言设置cookie的问题是,它不会在第一次加载时生效。javascript在模板文件索引上。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函数是ok的,如果它是空的或空的没关系,但问题是在var cookie2和cookie3上,编译后的结果是:
var cookie = ;
这会给我一个意想不到的标记错误。
关于如何解决这个问题有什么提示吗?
假设您的问题是因为您实际上无法更改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);
}
});
}
使用客户端JS代码读取cookie
在你的$(document)中。函数,可以从docmuent.cookies
对象中读取cookie。这里有一个关于如何做到这一点的例子:
如果你这样做,你就不需要在你的代码中加入cookie没有设置的情况(它实际上是设置的,但不是当你的服务器端代码正在运行时)。
cookie总是字符串。我想你只是缺少引号:
var cookie2 = "{COOKIE2}";
var cookie3 = "{COOKIE3}";
无论如何,您正在使用一种语言(PHP)为另一种语言(JavaScript)生成源代码,因此您只需非常小心地遵守目标语言的语法规则。在PHP中,一个常用的技巧是使用json_encode()来输出值。例如:
<?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>