ASP 3.0高級編程(三十二)_ASP教程
推薦:asp控制xml數(shù)據(jù)庫的6段非常的經(jīng)典代碼NO.1--建立一個XML數(shù)據(jù)庫data.xml <?xml version="1.0"?> <records> <record> <name>caca</name> <qq>1
7.2.4 客戶端腳本錯誤
到目前為止,我們已了解了來自ASP的錯誤。然而ASP也經(jīng)常用于創(chuàng)建包含客戶端腳本的網(wǎng)頁。如果包含客戶端代碼的<SCRIPT>元素沒有被設(shè)置成RUNAT="SERVER"屬性,ASP將不考慮服務(wù)器,而把網(wǎng)頁信息不加改變地傳送到客戶端。
因此,如果打開了一個ASP網(wǎng)頁,并且顯示的是一個瀏覽器錯誤對話框,就不應(yīng)該在服務(wù)器端尋找ASP程序代碼的錯誤。瀏覽器看不到ASP程序代碼,所以不能識別任何錯誤,如果有一個對話框出現(xiàn)在客戶端,那么在客戶端代碼中必定有一個錯誤。
1. 語法錯誤
如果在網(wǎng)頁中的客戶端程序代碼有語法錯誤的話,當(dāng)腳本下載到客戶端,瀏覽器便會出現(xiàn)相應(yīng)的錯誤。盡管網(wǎng)頁中內(nèi)容仍可正常載入(除非由這些客戶端腳本代碼動態(tài)裝入),但網(wǎng)頁停止執(zhí)行。用戶將看到一個包含錯誤細(xì)節(jié)的對話框,或者是一個指示網(wǎng)頁包含錯誤的狀態(tài)條消息。
現(xiàn)代瀏覽器趨向于隱藏網(wǎng)頁腳本錯誤的細(xì)節(jié),而僅在狀態(tài)條上顯示一個小的錯誤圖標(biāo)。在IE 4.0和IE 5.0中,正常的錯誤對話框可以通過Internet Options對話框的Advanced頁進(jìn)行設(shè)置來激活,如圖7-14所示:
圖7-14 Advanced頁面設(shè)置屏幕
處理腳本程序代碼中的客戶端錯誤和在服務(wù)器端相似,并且通常會更容易些,因?yàn)榻?jīng)常可以直接從服務(wù)器目錄中通過雙擊來下載網(wǎng)頁。一般不需要通過Web服務(wù)器和HTTP獲得網(wǎng)頁來觀察瀏覽器中的結(jié)果,其中的唯一不同是一些服務(wù)器交互由客戶端腳本來完成,如使用RDS的數(shù)據(jù)綁定或者動態(tài)裝入。
2. 運(yùn)行期或語義錯誤
在客戶端腳本中,通常可能會遇到語法錯誤,也會經(jīng)常遇到運(yùn)行期或語義錯誤。事實(shí)上,在客戶端,這種現(xiàn)象是很普遍的。因?yàn)樵诳蛻舳瞬荒芟穹⻊?wù)器端那樣對腳本的環(huán)境進(jìn)行控制,不能肯定用戶在他們的機(jī)器上正運(yùn)行什么,實(shí)際上在服務(wù)器上僅能從一些組件如Browser Capabilities中得到大概情況。
所以,使用客戶端對象或特殊版本的腳本語言和屬性的腳本程序很可能不能正常工作。盡管如此,處理客戶端錯誤和處理服務(wù)器端錯誤是差不多的。
3. 在服務(wù)器上創(chuàng)建的客戶端程序代碼
在錯誤發(fā)生時,作為“客戶端對話框?qū)?yīng)于ASP錯誤頁面”規(guī)則(關(guān)于出錯的地方)的一個特別的例外是,使用ASP程序代碼在服務(wù)器上動態(tài)地創(chuàng)建客戶端程序代碼。例如,可能想在ASP中進(jìn)行求值運(yùn)算,然后把數(shù)據(jù)傳給運(yùn)行在客戶端的腳本代碼,可能最容易的方法是把數(shù)據(jù)作為一個變量插入腳本代碼中:
<%
' get the name of our server from the ServerVariables collection
strServerNameInASP = Request.ServerVariables("SERVER_NAME")
%>
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var strServerName = "<% = strServerNameInASP %>";
…
alert('Server name is: ' strServerName);
…
// stop hiding code
-->
</SCRIPT>
在客戶端,在ASP處理這個頁面之后,將得到的是:
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var strServerName = "WROXBOX";
…
alert('Server name is: ' strServerName);
…
// stop hiding code
-->
</SCRIPT>
可以忽略RUNAT="CLIENT"屬性,但是加上這一項(xiàng)可以使得在查看運(yùn)行代碼的ASP網(wǎng)頁時更加清楚。
這樣,如果在某個位置想把服務(wù)器端數(shù)據(jù)庫中的數(shù)據(jù)加入到一個客戶端數(shù)組中,可以采用下面的程序?qū)崿F(xiàn):
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var arrBooks = new Array(10) //highest available index will be
<% ' start of ASP processing
intIndex = 0
Do While { not at the end of some recordset }
strTitle = { get title from database record }
Response.Write "arrBooks[" & CInt(intIndex) & "] = '" _
& strTitle & "'; " & vbCrlf
intIndex = intIndex 1
{ move to next record in database }
Loop
…
do something here on the client with the array of book titles
…
// stop hiding code
-->
</SCRIPT>
這段服務(wù)器端ASP程序代碼產(chǎn)生的客戶端代碼,在客戶端運(yùn)行時創(chuàng)建書名標(biāo)題數(shù)組。同時產(chǎn)生的客戶端腳本錯誤出現(xiàn)在瀏覽器的錯誤對話框中。錯誤的原因是以arrBooks命名的數(shù)組是由JavaScript代碼運(yùn)行在客戶端時創(chuàng)建的,僅能接受9個書名;而服務(wù)器端代碼能很可能產(chǎn)生多于9個的書名,具體多少由源數(shù)據(jù)庫中的記錄數(shù)來決定。這相當(dāng)于如下客戶端代碼:
<SCRIPT LANGUAGE="JScript" RUNAT="CLIENT">
<!-- hide code from older browsers
var arrBooks = new Array(10) //highest available index will be
arrBooks[0] = 'Instant JavaScript';
arrBooks[1] = 'Professional ASP 3.0 Programming';
arrBooks[2] = 'ADO 2.5 Programmers Reference';
…
etc
…
arrBooks[9] = 'ASP Techniques for Webmasters';
arrBooks[10] = 'ASP Programmers Reference'; // <- client-side error occurs here
arrBooks[11] = 'ADSI CDO Programming';
arrBooks[12] = 'Professional MTS and MSMQ Programming';
…
do something here on the client with the array of book titles
…
// stop hiding code
-->
</SCRIPT>
這個頁面只有經(jīng)過修正之后才能正常工作,可以通過增加數(shù)組大小,也可以通過控制來自數(shù)據(jù)庫的記錄數(shù)使其正常工作。
7.3 防止錯誤
上面已經(jīng)看到了能夠出現(xiàn)的一些不同類型的錯誤,并且有了一些查找錯誤的感覺。下面將考慮如何避免把錯誤引入程序中,盡管不能保證所編寫的程序沒有錯誤,但是這里概括的許多技術(shù)
分享:將ASP動態(tài)網(wǎng)頁轉(zhuǎn)換成HTM靜態(tài)頁面的方法前段時間有個asp頁面執(zhí)行起來很慢,訪問人數(shù)又頗多,而且又不經(jīng)常修改,又懶得直接做成靜態(tài)的,每次都要從服務(wù)器下載來改,只好想辦法把a(bǔ)sp頁面轉(zhuǎn)化成htm靜態(tài)頁面了。 以前就曾經(jīng)看到這樣的文
- asp FSO 讀寫文件本文件實(shí)現(xiàn)代碼
- asp中isNull、isEmpty和空字符串的區(qū)別
- asp獲取用戶真實(shí)IP地址的方法
- asp連接sqlserver數(shù)據(jù)庫實(shí)現(xiàn)代碼
- asp中正則表達(dá)式過濾html代碼函數(shù)
- asp中g(shù)et post提交表單區(qū)別
- 網(wǎng)頁模板:ASP內(nèi)建對象Request
- xmlhttp的open方法使用詳解
- ASP的常用的自定義函數(shù)大全
- asp中用for循環(huán)的一個小技巧
- eWebEditor v3.8 列目錄
- ASP無組件分頁實(shí)現(xiàn)思路及代碼
- 相關(guān)鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(三十二)。