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');}
新聞熱點
疑難解答
圖片精選