前端加后端验证倒计时答题功能实现

思路



  前端页面控制答题的开始,请求后台,后台记录开始的时间(发出请求的当前时间),再加上倒计时时间,得出结束时间。

  后端返回给前端剩余的时间,前端通过Jquery实现倒计时的动态效果。

  当倒计时结束,禁止答题,当用户刷新页面时,比较请求时间与结束时间,如果前者小于后者,答题继续,否则反之。

  其中,答题时间、开始时间、结束时间,均保存在内存中。

实现(SpringMVC+Jquery)



后端:

 1 /**
 2  * Copyright 2016 Zhengbin‘s Studio.
 3  * All right reserved.
 4  * 2016年6月3日 下午3:20:19
 5  */
 6 package zut.race.control.back;
 7
 8 import java.util.Date;
 9
10 import javax.servlet.http.HttpServletRequest;
11
12 import org.apache.log4j.Logger;
13 import org.springframework.stereotype.Controller;
14 import org.springframework.ui.ModelMap;
15 import org.springframework.web.bind.annotation.RequestMapping;
16
17 /**
18  * @author zhengbinMac
19  *
20  */
21 @Controller
22 @RequestMapping("test")
23 public class TestTimeController {
24     private static final Logger logger = Logger.getLogger(TestTimeController.class);
25     private static long beginTime = -1; // 毫秒
26     private static long answerTime = 20 * 1000; // 毫秒
27     private static long endTime = -1; // 毫秒
28
29     /*
30      * 1.裁判宣布开始答题 2.选手请求页面可以开始答题 3.选手中途关闭页面 4.倒计时结束,不可答题(前端加后端)
31      */
32     @RequestMapping("/begin")
33     public String begin(HttpServletRequest request, ModelMap model) {
34         // 裁判规定答题时间‘answerTime‘
35         String tempTime = request.getParameter("answerTime");
36         // 如果裁判没有规定答题时间,则为默认倒计时20秒
37         if (tempTime != null) {
38             answerTime = (Integer.parseInt(tempTime) + 2) * 1000; // 毫秒
39         }
40         // 记录裁判‘开始’的时间
41         beginTime = new Date().getTime(); // 毫秒
42         // 结束时间,开始时间加上答题时间
43         endTime = beginTime + answerTime;
44         return "redirect:/test/answer.do";
45     }
46
47     // 学生访问答题页面
48     @RequestMapping("/answer")
49     public String answer(ModelMap model) {
50         // 判断学生当前请求的时间是否在结束时间内
51         long nowTime = new Date().getTime();
52         if (beginTime == -1) {
53             model.addAttribute("message", "比赛未开始!");
54             return "/index.jsp";
55         }
56         // 如果学生当前请求的时间大于结束时间,返回‘答题结束’,否则可以‘继续答题’
57         if (nowTime >= endTime) {
58             model.addAttribute("message", "答题结束!");
59             logger.info("答题结束,当前时间:" + nowTime);
60         } else {
61             model.addAttribute("message", "请继续答题!");
62             model.addAttribute("endTime", endTime - nowTime);
63         }
64         return "/index.jsp";
65     }
66 }

前端:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 3 <%
 4     response.setHeader("Cache-Control", "no-store");
 5     response.setHeader("Pragrma", "no-cache");
 6     response.setDateHeader("Expires", 0);
 7 %>
 8 <html xmlns="http://www.w3.org/1999/xhtml">
 9 <script type="text/javascript" src="<c:url value=‘/js/jquery.min.js‘/>"></script>
10 <script type="text/javascript">
11     var a = 1001;
12     $(function() {
13         if ($("#endtime").val() != "") {
14             a = $("#endtime").val();
15         }
16         fomtime();
17     });
18     //以毫秒为单位
19     function fomtime() {
20         if (a <= 1000) {
21             console.log($("#message"));
22             if ($("#message").text() == "请继续答题!") {
23                 $("#message").text("答题结束!");
24             }
25             return;
26         }
27         a = a - 1000;
28         var b = new Date();
29         b.setTime(0);
30         var c = new Date();
31         c.setTime(a);
32         var day1 = b.getDate(); //为方便调用,把天数、小时等单独定义
33         var hours1 = b.getHours();
34         var minu1 = b.getMinutes();
35         var seco1 = b.getSeconds();
36         var day2 = c.getDate();
37         var hours2 = c.getHours();
38         var minu2 = c.getMinutes();
39         var seco2 = c.getSeconds();
40         var day = day2 - day1;
41         var hours = hours2 - hours1;
42         var minu = minu2 - minu1;
43         var seco = seco2 - seco1;
44         document.getElementById(‘daya‘).innerHTML = day;
45         document.getElementById(‘hoursa‘).innerHTML = hours;
46         document.getElementById(‘minua‘).innerHTML = minu;
47         document.getElementById(‘secoa‘).innerHTML = seco;
48         setTimeout("fomtime()", 1000);
49     }
50 </script>
51 <body>
52     <input type="hidden" value="${endTime}" id="endtime" name="endtime" />
53     <p style="color: red;" color="red" id="message">${message}</p>
54     <form action="<c:url value=‘/test/begin.do‘/>">
55         <input type="text" name="answerTime"> <input type="submit"
56             value="开始答题!">
57     </form>
58     <div>
59         距答题结束还有: <span id=‘daya‘></span>天 <span id=‘hoursa‘></span>小时 <span
60             id=‘minua‘></span>分 <span id=‘secoa‘></span>秒
61     </div>
62
63 </body>
64 </html>

*草草实现功能,代码不够优雅

时间: 2024-10-03 13:47:33

前端加后端验证倒计时答题功能实现的相关文章

现代软件工程_团队项目_阿尔法阶段_前端及后端新增功能_v1.0.1_2017.11.29

前端及后端新增功能v1.0.2 本篇文章的后端功能由php实现,可在阿里云服务器上查看源代码 一.实现功能简介: 注册新用户 登录 检验是否登录 完善我的信息 发布我的自习 显示已有自习列表 翻页查看更多自习 二.具体实现 注册新用户 前端页面为regestered.html 1.表单信息 账号account 密码password 确认密码confirmPassword 昵称nickname 手机号码cellphonNumber 科大邮箱ustcEmail 验证码verificationCode

购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车案例,非常精彩,这里这里记录下对此项目的理解. 文章:http://chsakell.com/2015/01/31/angularjs-feat-web-api/http://chsakell.com/2015/03/07/angularjs-feat-web-api-

前端和后端的双重验证

ASP.NET MVC和WebForm 轻松实现前端和后端的双重验证 jquery.validate+ValidationSugar 上次不足的改进 可能上一个贴子给大家带来很多误解,所以我这次把DEMO完善了两个版本 [ASP.NET WEBFROM]和[ ASP.NET MVC] 修改了一些BUG,并且修改了一些细了 在上个贴子里有人说,看了response.write就全身不舒服,所以也就写了基于异步提交的例子 功能介绍 ValidationSugar.cs 负责后台验证和前端 form

前端JS后端nodeJs 实现加解密; 个人理解

//说明: // 1.如果加密解密涉及到前端和后端,则这里的key要保持和后端的key一致 // 2.AES的算法模式有好几种(ECB,CBC,CFB,OFB),所以也要和后端保持一致 // 3.AES的补码方式有两种(PKS5,PKS7),所以也要和后端保持一致 // 4.AES的密钥长度有三种(128,192,256,默认是128),所以也要和后端保持一致 // 5.AES的加密结果编码方式有两种(base64和十六进制),具体怎么选择由自己定,但是加密和解密的编码方式要统////一 //

IC设计前端到后端的流程和eda工具。

IC前端设计(逻辑设计)和后端设计(物理设计)的区分:以设计是否与工艺有关来区分二者:从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路. 前端设计的流程及使用的EDA工具如下: 1.架构的设计与验证:按照要求,对整体的设计划分模块. 架构模型的仿真可以使用Synopsys公司的CoCentric软件,它是基于System C的仿真工具. 2.HDL设计输入:设计输入方法有:HDL语言(Verilog或VHDL)输入.电路图输入.状态转移图输入. 使用的工具有:Active-HDL,而

[技术博客] 如何在前端访问后端对象的更多数据

我们最近在做答题功能,有个需求是在前端判断用户的答案是否正确. 由于我们需要访问到答案数据, 一种方法是在前端调用使用Ajax到后端获取数据,代码如下: function requestRemoveData() { $.ajax({ url: '<服务器API地址>', success: (response) { console.log('后端返回的数据:'); console.log(response); } }); } 第二种方法是在将数据渲染在html的tag代码中,然后前端通过Jque

整理一些网站 方便查看和搜索的想法 有合作伙伴么 (需要产品 前端人员 后端人员 只要做网站web, 目前不考虑app, 后期考虑做公众号或者小程序, 也或者对外提供接口)

有合作伙伴么  (需要产品 前端人员 后端人员 只要做网站web, 目前不考虑app, 后期考虑做公众号或者小程序, 也或者对外提供接口) 主要期望功能: 网站形式展示 建立全文索引 加一页查看方式 加一键全文搜索 条件分类搜索   不如中专 大专  以及拥有的专业 首先的目标网站: http://www.cdwx1.com/cqzx/list_2.html 优化点: 列表添加条件快速有效的筛选 根据详情页的相关类别信息进行筛选 把详情页几个分页直接一页展示  方便快速预览 做出选择 按照每学习

前端和后端

舞台是展示自己最华丽的一面,那么,后台则是很多工作人员所运转. 一个大舞台,需要的是前端和后端,那么前端是什么,后端是什么? 我们抛开技术不说,举个例子吧! 比如一个大型的演唱会,如果没有一个好的歌手,没有好听的歌,不过光靠歌手还不行,还需要舞台,这个舞台需要谁来支撑呢?没错,就是后面的工作人员,没有他们,就没有这样顺利的演唱会. 如果前端是歌手,那么后端则是工作人员,这样就很好理解了,我们前端是干什么的.但是光靠展示和设计出漂亮的网页还不行,还需要和后端好好配合才能做好,所以这个博文会列举出后

文件上传之前端和后端

明天又是星期一.发现周末的时间过得真快啊.光阴似子弹,嗖的一下,两天就没了. 文件上传是web开发中很常见的场景,比如填写个人信息的时候传一两张自己美美哒照片,比如上传一张个性的头像.有时候需要上传一个压缩包,文档啥的.作为程序员嘛,自然免不了要想办法让这些美照啊,文件啊顺利的到达服务器. 今天我来写一段最简单的文件上传.至于简单到什么程度,那我先介绍一下稍微复杂的文件上传吧. 1.web2.0时代,用户体验是web开发必须考虑的问题,文件上传自然不能跳转,所以,类Ajax的方式上传文件是现代网