分類
Javascript

再探AJAX – 簡單小範例

利用原來的文章: https://diary.tw/archives/274 撰寫了一個更容易測試的 html 範例, 一則以測試同步及非同步, 另一則了解在IE及FF的 AJAX Callback 的差異.

幾件事情要特別小心:

1. browser cache:
在做 AJAX Callback 時, 若是 server side 程式不強迫 client side browser 不 cache 時, IE 會發生 callback response cache 的行為, 這個會讓 AJAX 取得的回應發生問題, 當然有多重方法可以解決, 在 FF 就沒有這種現象. 比較單純而又通用解決方法就是在 callback url 上動手腳, 和一般解決 cache 的方法相同, 這裡利用了 javascript 的時間戳記來將 url 變成每次都不同. 一般的實作方法有兩個, 一個是用 Date.parse(new Date()) 方法, 但時間比較不精確(每次取回的值最後三位皆為 000, IE, FF皆同), 另一則是 (new Date()).getTime() 似乎比較精確, 這兩個方法都是傳回從 January 1, 1970, 00:00:00, local time 開始的 milliseconds. 當然, server side 加不加上 cache control 的 header 就比較不影響了, 因為每次 browser 就會乖乖地來 request.

分類
程式技術

404 HANDLER

瀏覽器遇到web server回應的status code 404相信大家都不陌生, 無論是IIS或是APACHE都一樣, 只要是找不到這個檔案, 就是回應 404 給client囉.

如何handle web的回應, 除了是要有更 friendly 的回應外, 對於網站管理員來說, 更希望獲得哪些檔案是 user 要, 但是 web 上沒有的. 還記得之前有篇網路轉寄的內容, 有個 web server 的404回應網頁很有趣, 自怨自艾半天, 讓人會心一笑, 這就是友善回應的一種應用. 但能將 404用程式做某種方式記錄或是通知方便管理員處理, 相信也是在某些應用下的重要功能(當然要依實際狀況來用, 因為實務上發生404的機會並不低).

分類
Javascript

javascript的除錯小幫手

在 javascript 除錯時, 雖然有好用的 firefox 配合 plugin – firebug 來進行 step by step 的除錯, 也可以即時看到變數內容, 也很容易進行除錯, 但在長篇大論的 javascript 裡除錯, 總是希望能更快地獲得變數的值, 方便在偵測這些變數, 尤其是只有 IE 或沒有 firebug 在手邊時, 怎麼辦呢?

我們常常就直接用 alert 來進行變數的顯示, 但又要一直點一直點, 也是有點累(其實是自己懶), 但變數多時, 就更顯得麻煩, 於是用一種容易一點的方法, 就是配合 DHTML直接做頁面輸出就好了, 雖然談不上什麼技術, 但也算是一種小技巧, 給各位參考:

1. 先放一個 div 進來, 如下:
<div id=output></div>

分類
Javascript

模糊化你的javascript – Javascript Obfuscator

寫程式的過程中, 若不希望自己的程式碼給別人看, 最好的方法就是只提供編譯好的binary code, 而不提供原始碼(source code). 但 javascript 這種要給client side browser看的程式碼, 似乎沒有辦法將原始碼不提供出去. 但如此一來便會有程式碼外露的問題.

模糊化javascript並非是近期的技術, 早在沒有browser時, 單純的script也都希望被保護或難一眼望穿, 於是將程式碼加密或是混亂化(模糊化)就是這篇文章要探討的主題了.

隨著要讓 web 應用程式有更好的使用者經驗, RIA(Rich Internet Application)會是新一代web應用程式的主流應用技術, 無論是ajax或是單純的javascript, 都會隨著這類應用而使程式碼愈來愈多功能外露至client(再強調一下, 無論在client side做多少檢查, 在server side都要再做一次檢查, 以避免有安全性漏洞, server side的程式是最後把關的地方-當然, db端也能做不少防範事項), 於是無論是就安全性考量, 就程式碼保全考量, (還有另一個考量就是將程式碼壓縮以增進效能), 都應該要將 javascript 做某種程度的模糊化, 由於在模糊化的過程中, 通常會伴隨著體積縮小的效應, 所以 obfuscate 及 shrink 的作用是同時發生的. 基於這樣的好處, 適當地將 javascript 做模糊化是很有幫助的.

分類
TatterTools

新增TT訪問來源(RefererStatistics 0.6)

TT內有個很方便的統計訪問來源的後台介面, 相信這個資訊對交換連結或希望知道網站訪問來源的站長來說, 是很重要的. 一方面可以參考用戶從哪裡來的, 另一方面又可以連回去看看是什麼網站我的網址加入.

本plug-in功能是利用原來內建在TT內的RefererStatistics table內的資料依次數的前五筆排序, 列出在TT的介面上, 下載本plug-in後, 解開放在plugins目錄下, 並在skin上放置標籤後, 即可順利使用, 即使不到五筆, 也有檢查機制, 不會有任何問題, 建議使用區塊方式如下:

     <!-- RefererStatistics-->
     <div class="listbox">
       <h3>訪問來源</h3>
[ ##_RefererStatistics_## ]
     </div>

(注意, 上方的[ ##與## ]之間在skin上不能有空白, 這裡是為了不衝碼留空白方便顯示)
如此一來便能很方便地將訪問來源顯示給來訪的訪客看囉. 參考畫面如下:

希望能對大家在使用TT上能有幫助, 若有任何問題或建議, 也歡迎提出, 謝謝!

下載點:
RefererStatistics-0.6.zip

 

分類
.net

ASP.NET的Callback實作

在ASP.NET 2.0內支援了最令人感興趣的內容, Callback功能, 雖然實務上, 可以利用多種自訂的 server side 程式實作 AJAX 功能, 但是在 ASP.NET 2.0內建的 Callback 功能還是令人激賞, 接下來我們看看如何在 ASP.NET 2.0 下實作這個 Callback 的功能. (本篇文章以 c# 為範例語言)

要實作 Callback 功能, 首先要先了解 ICallbackEventHandler 這個 interface, 該 interface 有兩個方法:

string GetCallbackResult ()
void RaiseCallbackEvent (string EventArgument)

所以要達成 callback 的物件必需繼承 ICallbackEventHandler 這個 interface 並且實作這兩個方法, 一般是寫在 Page 下, 以下為一個範例:

分類
程式技術

Fiddler-HTTP Debugger

在寫 web 程式時, 常常需要除錯 http header 的時候, 或是要得到 browser 如何和 web server 溝通的過程時, 尤其是在寫 AJAX Code 的時候, 我們對於 packet level 的資訊會十分感興趣. 當然我們可以使用像是 sniffer 或是我常用的 ethereal 來進行封包的監聽, 再接著對這些監聽下來的封包分析. ethereal 可以利用一些 filter 或是關鍵字來進行封包的搜尋, 以方便在茫茫封包海中找到我們感興趣的資料.

有個方便的工具, 而且還是掛 microsoft 的工具, 是放在 Wininet 這個地方的監聽工具, Fiddler, 程式很小, 也很容易使用, 但因為是在 Wininet 這層, 所以只支援 IE, 像是 firefox 就是自行透過 socket 層實作 web request 就不支援, 另外像是 sleipnir 這種是用 IE 核心(其實也就是利用 Wininet 這組 api 進行 web reqeust) 的也支援, 簡單地說, 有用 Wininet 的 api 的應該都能用 Fiddler 來進行封包的監聽. (不過不包含 ftp, 僅有 wininet 的 http 部分)

分類
Javascript

有趣的JSON技術

寫 javascript 對一般的網頁程式設計人員來說, 應該是家常便飯, 舉凡一些需要在 client side 完成的事, 大多會利用 javascript 來操作, 例如滑鼠經過換色, 或是檢查 form (表單)在送出前的一些資料正確性檢查(ps. 一定要記得在 server side 也要再次檢查, 以確保資料的正確性)或方便使用者輸入的自動更正等功能.

javascript 的功能強大, 又加上高階, 物件化等特性, 使得撰寫 javascript 的程式設計人員十分愛用, 也方便許多在 client side 就可以先完成的一些動作, 再加上最近的 Ajax 風行, javascript 無疑變成十分熱門的語言.

JSON (Javascript Object Notation)相信很多人有聽過, 但也有很多人不知道這個東西, 他是附屬在 javascript 下的一組物件描述方法, 這個網站介紹十分詳細: http://www.json.org/, 有很容易了解的圖示幫助使用者了解 JSON 物件的描述方式.

JSON 是利用了成對的 {} 來包住各物件(object), 用成對的 [] 來包任各陣列(array), 用成對的 “” 來包住各字串, 用逗號來區隔各變數, 而資料型態有 string, number, array, object, 另外有三個常數, true, false, null. 下面描述了一個 object obj1 擁有兩個成員變數, 而另一個為 array 擁有 5 個 number 的範例:

{ 'obj1': {
  'child1':'value1',
  'child2':'value2'
  },
  'array1': [1, 2, 3, 4, 5]
};
分類
PHP

php error handling

今天來研究一下 php 的 error handling, 一般的程式錯誤, 很重要的一件事就是錯誤處理, php 當然也不例外. php 本身對於錯誤處理已有一套完整的設計, 讓程式設計人員可以很容易地進行錯誤處理.

我們可以參考內建 function 進行 error handler 設置, 這個 function 為 :
mixed set_error_handler ( callback error_handler [, int error_types] )

該 function 傳入的 callback function即為我們要使用的 error handling function, 該 function 定義如下:
handler ( int errno, string errstr [, string errfile [, int errline [, array errcontext]]] )

分類
Javascript

xmlRequest更換網頁內容

AJAX?

不就是這樣子嗎? 利用一種方法, 在不換頁的狀況下, request web 的 content 後, 進行訊息的顯示或是畫面的更新(dhtml), 這不就是 AJAX? 是的, 其實很容易也很簡單實現, 要做到不換頁更新畫面的方法就是這麼簡單.