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');}
新闻热点
疑难解答
图片精选