我再一次向SO社区寻求帮助。
我正在修改一个Joomla“测验”组件,使其按照我需要的方式运行。 我现在要做的是改变组件的“刷新”行为。基本上,每个测验都有一个超时,即用户不再可以访问测验的时间,因此当计时器变为0时,提交测验等等,但是这个组件的默认行为使得它在每次如果页面刷新,计时器将重置为初始设定时间(比方说,10分钟)
事情是,我希望能够让计时器从原来的位置继续进行刷新。
我从3年或4年前就没有使用PHP,所以我有点迷失。
为了能够达到预期的行为我正在设置一个cookie,它将存储(通过内爆)初始时间(当测验被打开时)和“现在”时间(在加载时它被设置为0但是在刷新我想“更新”cookie以存储重载时间。)
利用初始时间和现在的时间,我将能够计算已经过了多少时间并将计时器从中断的位置开始。
问题是,我正在尝试使用javascript'onbeforeunload'“更新”cookie,以便我可以设法将刷新时间放入cookie中。但出于某种原因,它根本没有做任何事情。当我去看cookie内容时,从设置cookie开始,一切都是一样的。
我知道为了更新cookie,我必须删除它然后重新设置它,但我没有成功。
下面是示例代码:
//This is responsible for setting the cookie (via PHP):
<?php
$name = "progress";
$now = 0;
$time_diff = 0;
$expire = time() + 3600;
$data = array(time(), $now, $time_diff, $this->quiz->time_limit);
//$var = implode(',', $data);
if(isset($_COOKIE[$name])) {
/* If defined, update the timer */
} else {
setcookie($name, implode(',',$data), $expire);
}
echo $_COOKIE[$name];
echo "<br />";
echo $this->quiz->time_limit;
?>
这是检测“刷新”事件(使用运行PHP的Javascript):
window.onbeforeunload = function() {
<?php
$name = "progress";
$list = explode($_COOKIE[$name]);
//delete cookie
setcookie($name, "", time() - 3600);
//Update the fields
$list['1'] = time(); //now - refresh time
$list['2'] = $list['1'] - $list['0']; //time_diff
//Set the cookie again
setcookie($name, implode(',', $list), time() + 3600);
?>
}
有人能指出这段代码有什么问题吗?
答案 0 :(得分:2)
正如评论中所说,JavaScript无法像这样运行PHP代码......但是如果你使用AJAX那么你可以。现在使用您发布的代码供我们查看,如果您在浏览器中加载页面并查看代码,您的功能将如下所示:
window.onbeforeunload(){
}
因此,当您关闭浏览器时,您的cookie不会发生任何事情就不足为奇了。现在,在没有看到你的其他功能的情况下,很难准确地说出发生了什么,但你可以使用PHP和JavaScript交织在一起,但是以不同的方式。让我用一个例子解释一下。
window.onbeforeunload(){
var name = <?php $name='Steve'; echo($name); ?>;
console.log(name);
}
如果您有这个代码并在浏览器中加载页面,您将不再看到PHP代码,而是会看到:
window.onbeforeunload(){
var name = 'Steve';
console.log(name);
}
<小时/> 话虽如此,这里有一些你可能会发现有用的链接。