2011-10-13 10:45:52nut

[技術]出現更新完成的alert跳兩次 但程式明明指呼叫一次的情形該怎辦?

在程式最上頭指定
response.charset = "big5"

問題即可解決



資料來源:Bobby's 程式記錄

ASP 頁面編碼造成自動 Refresh

今天遇到一個超怪的問題
我在ASP前面幾行讀取前頁submit過來的資料
將資料更新回DB

發現更新完成的訊息居然會重複alert 2次

查了好久的網路才查到一點眉目
可能是因為頁面編碼(Charset)的問題

我在HTML head中有寫一行
<meta http-equiv="Content-Type" content="text/html; charset=big5">
但其實這行的意義是指
此頁的表單資料要用什麼編碼方式submit出去
並非是指這頁要用什麼編碼方式顯示
詳見保哥寫的一篇[關於各瀏覽器對網頁與文字編碼的處理規則研究整理]

想要設定本頁要用什麼編碼方式顯示
在ASP中,要使用
<%response.charset = "big5"%>
加上這行,我的ASP就一切正常了

個人推測此次的原因為:

一開始沒有設定本頁顯示的編碼
所以一開始預設用utf-8編碼來顯示本頁資料
直到程式開始讀取DB的資料時
發現DB是用big5編碼儲存資料的
所以瀏覽器自動refresh本頁,改變編碼為big5

而更新DB的程式段剛好又在讀取DB資料之前
造成一開始用utf-8編碼顯示頁面時,進行更新,並alert更新完成的訊息
後來遇到程式讀取DB資料,自動refresh本頁後,不會再次更新,但會再alert更新完成的訊息

以此推論 :
因資料與頁面的編碼不符時
僅會refresh client端頁面資料 (並沒有對server再次發出request)
所以ASP程式段不會重複執行
但是client端的javascript全都會重複執行

但我剛好也有另一支程式也是用這種結構寫的
卻沒有這個問題
所以詳細原因還要在釐清...

另外補充一下 :
在 HTML head 中的程式段
好像不會依改變編碼而重新執行
<html>
   <head>
     <script language="javascript">
        alert("Hello World!");
     </script>
   </head>
   <body>

   </body>
</html>