24h購物| | PChome| 登入
2011-10-13 10:45:52| 人氣1,475| 回應0 | 上一篇 | 下一篇

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

推薦 0 收藏 0 轉貼0 訂閱站台

在程式最上頭指定
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>



台長: nut
人氣(1,475) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 技術 |
此分類下一篇:[技術] 我寫ASP的一些技巧
此分類上一篇:[技術]如何利用JavaScript, 取出表單中用迴圈產生的control的值

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文