隨著全球信息網(wǎng)應(yīng)用的普及,越來越多的公司、個(gè)人希望通過此傳播媒介發(fā)展業(yè)務(wù)。同時(shí),對(duì)于系統(tǒng)的智能化、人性化設(shè)計(jì)要求也與日上升,JavaScript和動(dòng)態(tài)頁面語言的混合應(yīng)用也因此得以廣泛推廣。
JavaScript 是一種腳本語言,此語言可以被嵌入 HTML 的文件之中。透過JavaScript 回應(yīng)用戶所觸發(fā)的事件 (如:form對(duì)象的輸入和檢測(cè)) 而不用任何的網(wǎng)絡(luò)來回傳輸資料。當(dāng)使用者輸入一項(xiàng)資料時(shí),它不用經(jīng)過傳給服務(wù)器端 (server) 處理,再傳回來的過程,便可直接被客戶端 (client) 的應(yīng)用程序處理。
運(yùn)行JavaScript的載體是客戶端,不但可以讓系統(tǒng)實(shí)時(shí)的與用戶進(jìn)行交互,而且因?yàn)楸苊饬司W(wǎng)絡(luò)的傳輸,大大地加快運(yùn)行速度和減輕服務(wù)器的負(fù)擔(dān)。而JavaScript令人著迷的地方是:通過語言的編寫,控制整個(gè)頁面當(dāng)中的所有對(duì)象。它可以控制包括表單對(duì)象、頁面字體內(nèi)容、圖片位置等屬性,使得頁面更為絢麗。
Web網(wǎng)頁具備強(qiáng)大的功能,在短短的幾年之間得以迅速的發(fā)展,動(dòng)態(tài)網(wǎng)頁可以通過鏈接數(shù)據(jù)庫,使頁面內(nèi)容根據(jù)用戶信息和數(shù)據(jù)庫內(nèi)容,對(duì)其進(jìn)行內(nèi)容控制。但由于動(dòng)態(tài)頁面語言是屬于服務(wù)器端(server)語言,每一次數(shù)據(jù)交換都必須經(jīng)過網(wǎng)絡(luò)傳送、服務(wù)器計(jì)算、數(shù)據(jù)回傳三個(gè)步驟。因此,經(jīng)常會(huì)出現(xiàn)由于網(wǎng)絡(luò)的關(guān)系導(dǎo)致數(shù)據(jù)傳送的延誤、出錯(cuò)等現(xiàn)象。
為了使頁面的智能化得以進(jìn)一步提高,頁面能夠根據(jù)用戶事件進(jìn)行實(shí)時(shí)回應(yīng),將客戶端和服務(wù)器端的語言相結(jié)合成為了網(wǎng)絡(luò)語言編寫的新動(dòng)向。
方法如下圖:
首先由服務(wù)器端動(dòng)態(tài)頁面語言,如ASP、JSP等對(duì)數(shù)據(jù)進(jìn)行記錄集的綁定,調(diào)出所有相關(guān)數(shù)據(jù)庫的內(nèi)容。數(shù)據(jù)經(jīng)過傳送后,暫存在JavaScript動(dòng)態(tài)生成的數(shù)組當(dāng)中。JavaScript根據(jù)用戶觸發(fā)的事件和信息,對(duì)數(shù)組中內(nèi)容進(jìn)行篩選后通過語言控制顯示在頁面中。
下面,筆者就以兩個(gè)例子說明JavaScript與ASP(VBScript)相結(jié)合的使用方法。
1 檢測(cè)網(wǎng)絡(luò)新用戶
在網(wǎng)絡(luò)應(yīng)用中,用戶經(jīng)常使用“注冊(cè)”這一功能,如電子郵箱、論壇用戶名等。如何使新注冊(cè)的用戶名不與已有的用戶名相沖突,并且實(shí)時(shí)地對(duì)用戶進(jìn)行提示,避免提交后方可檢測(cè)的麻煩呢?這就需要將兩種語言相結(jié)合,相互補(bǔ)足。
具體操作步驟:
(1) 綁定記錄集,將數(shù)據(jù)庫中的所有用戶名進(jìn)行調(diào)出
建立數(shù)據(jù)庫鏈接類型,通過SQL語句對(duì)數(shù)據(jù)中的“nname”(用戶名)字段內(nèi)容進(jìn)行綁定。綁定記錄集名為“R1”。
<%set obj=server.CreateObject(\"ADODB.Connection\")
obj.ConnectionString=\"provider=Microsoft.jet.oledb.4.0;data source=\"server.mappath(\"/book.mdb\")
obj.open
set R1=server.CreateObject(\"ADODB.Recordset\")
ms=\"SELECT nnameFROM bpass \"
R1.open ms,obj,1%>
(2) 建立JavaScript中的數(shù)組
由于用戶名的數(shù)量未知,因此建立動(dòng)態(tài)數(shù)組“k”。
接下來,使用ASP語句對(duì)記錄集R1進(jìn)行遍歷,將所有記錄集字段nname內(nèi)容存放在數(shù)組當(dāng)中。
以t作為標(biāo)識(shí),使新建一個(gè)數(shù)組單元便存放一個(gè)用戶名。
<script language=\"javascript\">
var k = new Array();
<%t=0
while (not R1.eof) %>
k[<%= t %>] = new Array('<%= R1(\"nname\") %>')
<% t=t+1
R1.movenext
wend%>
(3) 檢測(cè)新用戶名
由用戶觸發(fā)事件,調(diào)用自定義函數(shù)。
把注冊(cè)新用戶名,即頁面中用戶名輸入框中的值(form1.textfield.value),跟所有數(shù)組單元中內(nèi)容進(jìn)行匹對(duì)。
若用戶名已存在,退出循環(huán),并在指定位置當(dāng)中顯示出錯(cuò)提示,否則提示用戶名可用。
function s()
{for(i=1;i<=<%= R1.recordcount %>;i++)
{
if (k[i-1]==form1.textfield.value)
{
document.getElementById(\"kk\").innerHTML=\"出錯(cuò),該用戶名已經(jīng)被占用\"
break;}else{
document.getElementById(\"kk\").innerHTML=\"可用\"
}}}</script>
2 二級(jí)級(jí)聯(lián)的下拉列表
表單中的下拉列表,可以讓用戶直觀、準(zhǔn)確地選擇所需要的信息。可是,一旦數(shù)量較多時(shí),逐一拉選檢查并非一個(gè)明智之舉。不但效率較低,而且用戶使用起來也顯得比較笨拙。
二級(jí)級(jí)聯(lián)的方法就是把所有的選項(xiàng)進(jìn)行分類,讓用戶先選擇類型,然后再選擇具體目標(biāo)。如對(duì)學(xué)校各位老師的姓名進(jìn)行選擇時(shí),因?yàn)槿藬?shù)較多,即使按姓名排列的方法也較費(fèi)時(shí)間。使用二級(jí)級(jí)聯(lián)方法,可先按照各人所屬科室進(jìn)行分組。用戶在使用的時(shí)候,首先在第一個(gè)下拉列表中選擇科室,第二個(gè)列表中立即刷新為所屬人員列表。這樣,使系統(tǒng)的利用效率得以大大地增強(qiáng),對(duì)于用戶的使用也更具人性化。
由于所有人員資料已經(jīng)全部綁定在記錄集并存放在JavaScript的動(dòng)態(tài)數(shù)組中,當(dāng)用戶重選所屬科組,瀏覽器也不需再經(jīng)過服務(wù)器的數(shù)據(jù)傳輸,而直接在客戶端里便可以完成人員列表的更新,用戶能更加直觀、迅速、準(zhǔn)確地選擇目標(biāo)選項(xiàng),這也是ASP和腳本語言相結(jié)合的優(yōu)勢(shì)體現(xiàn)。
具體操作步驟:
(1) 綁定記錄集
將所有教師的姓名、科室取出,并綁定為記錄集。綁定方法與上例中的記錄集綁定方法一致,先建立數(shù)據(jù)庫的鏈接,再定義記錄集對(duì)象,最后執(zhí)行SQL查詢語言“SELECT * from teachers”。
(2) 建立JavaScript中的二維動(dòng)態(tài)數(shù)組
動(dòng)態(tài)數(shù)組的建立方法與例一相同,不同之處在于本例中需要利用記錄集中的數(shù)據(jù)建立二維數(shù)組。如屬于筆者資料的二維數(shù)組內(nèi)容為:subcat[177]=new Array(“計(jì)算機(jī)”,”李志宏”)。其一維內(nèi)容“計(jì)算機(jī)”作為后面列表顯示內(nèi)容的匹配條件,二維內(nèi)容“李志宏”是作為第二列表的內(nèi)容標(biāo)簽和值。其中關(guān)鍵語句為二維數(shù)組的建立:
subcat[<%= t %>] = new Array('<%= R2(\"tkeshi\") %>','<%= R2(\"teaname\") %>')
(3) 人員列表更新函數(shù)
當(dāng)用戶在列表一中選擇了科組后,觸發(fā)以下函數(shù)對(duì)人員列表內(nèi)容進(jìn)行更新:
function changeselect1(locationid)
{ document.form1.s2.length = 0;
document.form1.s2.options[0] = new Option('==請(qǐng)選擇==','');
for (i=0; i<subcat.length; i++)
{if (subcat[i][0] == locationid)
{document.form1.s2.options[document.form1.s2.length] = new Option(subcat[i][1], subcat[i][1]);}
}
}
循環(huán)動(dòng)態(tài)數(shù)組,將一維內(nèi)容與列表一傳送的參數(shù)locationid進(jìn)行匹配,利用“new Option”命令把二維內(nèi)容添加至列表二中,并設(shè)為當(dāng)前選項(xiàng)的值。這樣,通過用戶所選取的科組內(nèi)容,經(jīng)過循環(huán),腳本函數(shù)可以自動(dòng)地給列表二更新內(nèi)容。而這一切,完全由客戶端完成,免去了對(duì)數(shù)據(jù)庫的多次調(diào)用。
由服務(wù)器端語言負(fù)責(zé)數(shù)據(jù)庫的調(diào)用,客戶端語言負(fù)責(zé)與用戶交互。因此系統(tǒng)可以自動(dòng)地根據(jù)用戶的事件進(jìn)行即時(shí)的反應(yīng)或提醒,使系統(tǒng)顯得更加“人性化”。而現(xiàn)今網(wǎng)絡(luò)使用管理中,“智能化”、“高效率”是今后網(wǎng)絡(luò)編程發(fā)展的大趨勢(shì)。因此怎樣通過結(jié)合各種不同的網(wǎng)絡(luò)編程語言來進(jìn)行優(yōu)化網(wǎng)頁的使用管理已成為我們共同關(guān)注的話題,而JavaScript與ASP(VBScript)相結(jié)合的使用亦成為我們解決實(shí)際難題的主要方法。
——————————
作者簡(jiǎn)介:李志宏(1981-),廣州市人,于廣州第一商業(yè)中專學(xué)校任教師。主要研究方向:網(wǎng)頁制作、網(wǎng)站建設(shè)。