您好,欢迎访问一九零五行业门户网

Ajax实现考试倒计时并自动提交试卷功能

这次给大家带来ajax实现考试倒计时并自动提交试卷功能,ajax实现考试倒计时并自动提交试卷功能的注意事项有哪些,下面就是实战案例,一起来看一下。
1.概述
在开发网络考试系统时,考试计时并自动提交试卷是必不可少的功能。由于在答卷过程中,试卷不能刷新,所以需要使用ajax实现无刷新操作。运行本实例,访问准备考试页面index.jsp,在该页面中,单击“开始考试”按钮,将打开新窗口显示开始考试的页面,如图10.1所示,页面会自动计时,当考试时间结束时,将自动提价试卷。
2.技术要点
主要是利用ajax异步提交技术和servlet技术实现的。显示在考试页面中的计时时间是在servlet中设置的,需要通过ajax的异步提交不断的请求servlet,从而获得服务器返回的最新的计时时间的数据。为了便于维护和代码的重用,可以将ajax的请求方法封装到一个js文件中,该方法可以作为一个公共方法,在程序中使用时可以直接调用。
3.具体实现代码
在js文件中构建xmlhttprequest对象以及请求方法,如下代码所示:
/** * 构建xmlhttprequest对象并请求服务器 * @param reqtype:请求类型(get或post) * @param url:服务器地址 * @param async:是否异步请求 * @param resfun:响应的回调函数 * @param parameter :请求参数 * @return :xmlhttprequest对象 */ function httprequest(reqtype,url,async,resfun,parameter){  var request = null; if( window.xmlhttprequest ){ //非ie浏览器,创建xmlhttprequest对象 request = new xmlhttprequest(); }else if( window.activexobject ){ //ie浏览器,创建xmlhttprequest对象 var arrsignatures = [msxml2.xmlhttp, microsoft.xmlhttp, microsoft.xmlhttp, msxml2.xmlhttp.5.0, msxml2.xmlhttp.4.0, msxml2.xmlhttp.3.0, msxml2.xmlhttp];  for( var i = 0; i < arrsignatures.length; i++ ){ request = new activexobject( arrsignatures[i] ); if( request || typeof( request ) == "object" ) break; } } if( request || typeof( request ) == "object" ){ if(reqtype.tolowercase()=="post"){ //以post方式提交 request.open(reqtype, url, true); //打开服务器连接 //设置mime类型 request.setrequestheader("content-type", "application/x-www-form-urlencoded"); request.onreadystatechange = resfun; //设置处理响应的回调函数 parameter = encodeuri(parameter); //将参数字符串进行编码 request.send(parameter); //发送请求 } else{ //以get方式提交 url = url+"?"+parameter; request.open(reqtype, url, true); //打开服务器连接 request.onreadystatechange = resfun; //响应回调函数 request.send(null); //发送请求 } } else{ alert( "该浏览器不支持ajax!" ); } return request; }
(1)新建index.jsp页,该页面是用户访问的初始页。在页面中主要包含一个“开始考试”按钮,该按钮的onclick事件将调用打开考试窗口的javascript函数,关键代码如下:
function showwindow(){ window.open('startexam?action=startexam','','width=750,height=500,scrollbars=1'); }
(2)新建名为startexam的servlet实现类,该类用创建考试的开始时间和剩余时间。在该类中,创建一个全局变量examtime,用于记录考试时间,该变量的值是在web.xml中设置的,关键代码如下:
<servlet> <servlet-name>startexam</servlet-name> <servlet-class>com.lh.servlet.startexam</servlet-class> <init-param> <param-name>examtime</param-name> <param-value>20</param-value> </init-param> </servlet>
(3)在startexam类中,编写用于将页面转发到开始考试页面的方法startexam()。关键代码如下:
public void startexam(httpservletrequest request,httpservletresponse response) throws servletexception,ioexception{ httpsession session = request.getsession(); request.setattribute(time, examtime); //保存考试时间 session.setattribute(starttime1,new date().gettime()); //保存当前时间的毫秒数 request.getrequestdispatcher(startexam.jsp).forward(request, response); }
(4)新建showstarttime.jsp页,用于输出计时开始时间。关键代码如下:
<%@page contenttype="text/html" pageencoding="gbk"%> ${showstarttime}
(5)新建showremaintime.jsp页,用于输出计时剩余时间。关键代码如下:
<%@page contenttype="text/html" pageencoding="gbk"%> ${showremaintime}
(6)新建开始考试页面startexam.jsp页,在该页中通过调用ajax请求方法请求startexam类,获得考试的开始时间和剩余时间。关键代码如下:
var request1= false; var request2 = false; //请求servlet获得开始时间  function showstarttime(){ var url = startexam; //此处需要加&nocache=+new date().gettime(),否则将出现时间不自动走动的情况 var parameter=action=showstarttime&nocache=+new date().gettime(); request1 = httprequest(post,url,true,callbackfunc,parameter);  } //回调函数  function callbackfunc(){ if( request1.readystate==4 ){  if( request1.status == 200 ){ showstarttimep.innerhtml=request1.responsetext; } } } //请求servlet获得剩余时间  function showremaintime(){ var url = startexam; var parameter=action=showremaintime&nocache=+new date().gettime(); request2 = httprequest(post,url,true,callbackfunc_r,parameter);  } //回调函数  function callbackfunc_r(){ if( request2.readystate==4 ){  if( request2.status == 200 ){ h=request2.responsetext; showremaintimep.innerhtml=h; h=h.replace(/\s/g,); //去除字符串中的unicode空白符 showremaintimep.innerhtml=h; if(h==00:00:00){ form1.submit(); } } } }
(7)为了实现页面加载后自动计时,需要在开始考试页面的 <body>标签中通过onload事件应用window.setinterval()方法调用showstarttime()函数和showremailtime()函数,关键代码如下:
<body onload="showstarttime();showremaintime();" onkeydown="keydown()">
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
ajax的restful接口传输json数据的方法
ajax怎么对xml文件进行增删改查
以上就是ajax实现考试倒计时并自动提交试卷功能的详细内容。
其它类似信息

推荐信息