Web应用程序中的计时器

时间:2010-02-04 10:40:06

标签: javascript ajax cakephp timer

我正在尝试使用CakePHP创建基于Web的测试(如在考试中)。

启动测试时,Web服务器会在会话中存储确切的开始时间。当测试结束并且客户端将答案提交给Web服务器时,Web服务器将重新检查提交时间与上一个开始时间。如果总测试时间在指定的误差范围内(例如5分钟),则将接受测试结果。

我已经完成了这部分,目前正在使用jQuery Countdown Plugin在客户端(浏览器)中显示计时器。此计时器还用于在表单过期时自动提交表单。

问题是刷新页面会重置计时器。继续前进也会这样做(因为它基本上令人耳目一新)。

尽管在服务器中记录并验证了所用的总测试时间(如果用户篡改了计时器并提交了测试,系统将拒绝它),无论如何都要防止这种情况或者至少发出警告,或者更好的是,在用户篡改的情况下自动提交测试(当然会被拒绝)?

我知道我可以通过使用AJAX(仍然是初学者)来做到这一点,但是由于带宽限制(我不这么认为),高层人士告诉我不这样做。那么......有人吗?

先谢谢!

2 个答案:

答案 0 :(得分:1)

您需要获取服务器当前时间和测试开始时间。减去两者,您将获得用户已经花费多长时间进行该测试。现在,只需从你的时间限制(5分钟)中减去这个值,你就有剩余的时间;值小于零意味着测试时间结束。

答案 1 :(得分:0)

首先,它不是所需的ajax,因为它是让服务器在页面加载时设置客户端计时器的概念。是的,您可以通过ajax执行此操作 - 让客户端请求document.ready()上的当前时间。但是,除非你需要额外的同步功能(这样就可以真实地打开蠕虫),当你只能从原始服务器提供的页面设置这个值时,没有理由通过ajax发出单独的http请求。

因此,如果您的页面是/ exams / page,在ExamsController :: page()方法中,您可以执行以下操作:

$this->set( 'cur_time', date( 'N-d-Y', strtotime() );

然后在你渲染的视图中,让它做这样的事情:

<?php echo $cur_time; ?>

将该片段包装在一个javascript代码块中,该代码块将设置一个JS变量来填充jQuery计数器,该计数器可以在页面加载完成后再次开始计数。这里没有额外的带宽!