Javascript Web应用中的定时器

Javascript Web应用中的定时器,javascript,ajax,cakephp,timer,Javascript,Ajax,Cakephp,Timer,我正试图用CakePHP创建一个基于web的测试(就像在考试中一样)应用程序 测试启动时,Web服务器会在会话中存储确切的启动时间。当测试结束,客户端将答案提交给Web服务器时,Web服务器将重新检查提交时间和之前的开始时间。如果总测试时间在规定的误差范围内(例如5分钟),则测试结果将被接受 我已经完成了这一部分,目前正在使用在客户端(浏览器)中显示计时器。此计时器还用于在表单过期时自动提交表单 问题是刷新页面将重置计时器。往回走也会这样做(因为它本质上是令人耳目一新的) 尽管在服务器上记录并验

我正试图用CakePHP创建一个基于web的测试(就像在考试中一样)应用程序

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

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

问题是刷新页面将重置计时器。往回走也会这样做(因为它本质上是令人耳目一新的)

尽管在服务器上记录并验证了所花费的总测试时间(如果用户篡改了计时器并提交了测试,系统将拒绝它),但是否有任何方法可以防止这种情况发生,或者至少发出警告,或者更好的是,在用户篡改的情况下自动提交测试(当然会被拒绝)

我知道我可以通过使用AJAX来做到这一点(在这方面我还是个初学者),但是上级告诉我不要这样做,因为带宽有限(我不这么认为)。所以有人吗


谢谢你

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

首先,需要的不是ajax,而是让服务器在页面加载时设置客户端计时器的概念。是的,您可以通过ajax实现这一点——让客户端请求document.ready()上的当前时间。但是,除非您需要额外的同步功能(这会打开另外一罐蠕虫),否则,如果您只需从原始服务器提供的页面设置此值,就没有理由通过ajax发出单独的http请求

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

$this->set( 'cur_time', date( 'N-d-Y', strtotime() );
<?php echo $cur_time; ?>
然后在渲染的视图中,让它执行如下操作:

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


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

嗯,实际上我想要的是同步功能:)我已经做到了。。。无论如何谢谢你!您的意思是按照相同的结束时间进行同步,还是希望在页面老化时重新同步。后者正是我所指的,只有当你的申请是实时的(而不仅仅是试图限制考试的时间)时,它才真正适用。基本上,如果您认为这两个时钟在一个页面中可能会漂移,那么您可能需要重新同步。否则,我只需相信客户端的时钟,而不必担心页面内的同步(当然,记得在服务器上检查是否允许提交,不要相信客户端JS来完成)。