2006年01月18日 22:40
AJAX 輕鬆上手 - 以台灣五碼郵遞區號為範例 (含程式碼)
什麼是 AJAX
我這邊不詳細說明什麼是 AJAX。AJAX 就是利用 Javascript、CSS、DOM、XML、XMLHTTPRequest 等技術合成的一個程式技巧,主要目的是要讓 Web 上的程式看起來更像 Desktop 的程式。
Framework 或 Library
正因為 AJAX 結合了很多不同的技術,所以撰寫起來還真有一點困難,因此,很快網路上就出現了很多 Framework 或是 Library 讓你可以輕易把 AJAX 寫好。
其中比較有名的如:
我今天就要以 Prototype 為例子寫一個範例。
程式說明
這一個範例程式,主要就是讓使用者輸入一個郵遞區號(3 碼或是 5 碼),如果這個郵遞區號存在,就回傳該郵遞區號的地點。
需求
- Prototype.js http://prototype.conio.net/
- 郵遞區號表 前往郵局下載
- 熟悉 PHP
- 熟悉 Javascript
- 熟悉 CSS
- 熟悉 XHTML
詳細說明
這個程式主要分成三個部分,查詢郵遞區號程式、AJAX 主程式、CSS 檔。
查詢郵遞區號程式,我是使用 PHP 寫成,傳入 zip ,然後開啟 zip32.txt (郵遞區號檔案),逐行查詢,3 碼的話只要回傳縣市、鄉鎮區,而且只有一個。五碼的話,會有很多結果,全部都回傳。如果,完全沒有相符的郵遞區號,僅僅回傳 "\n"
程式碼如下

第二部分就是 AJAX 主程式,在說明主程式之前,先跟大家介紹幾個 Prototype 的函數。
- $('ID') ,$()這個函數會回傳 DOM 該 ID 的 element 回來。這樣可以讓你更方便去 Access。
- $F('ID'),$F() 這個 Fuction 會回傳 FORM 裡面,該 ID 的 Element。
- Ajax.Request() 這一個 Function 是 AJAX 的主要靈魂,他會去你指定的 URL 讀取資料,當完成的時候會透過你指定的 Call-Back Function 去執行接下來的動作。

當使用者在 zip 那個 input box 按了按鍵之後,就會去執行 checkZip,如果使用者輸入的字串已經 >=3 就可以去後端查詢。
查詢就是利用前面說的 AJAX_Request 函數,並且指定 Callback function 為 ShowResult。當後端查詢完成後,Prototype 就會去執行 ShowResult 並且傳入整個後端擷取的結果,我只要判斷長度是不是 > 2 ,我就可以知道,剛剛查詢的 zip 到底正不正確,如果正確,只要把整個值填到 zipResult 這個 Div 裡面就可以了。
而其中 LIMG 這個 Div 主要是用來顯示是否在執行後端資料庫(圖檔是連到 http://ql.aonic.net/loader.gif),並沒有特別用途。
第三部分就是 CSS


整個程式大概就是這樣。
後記
這一次我已經調整到 Firefox 跟 IE 都可以使用,而且看起來也差不多,不過,Firefox 對 CSS 的解釋真的跟 IE 有差,我也不敢說誰對誰不對,畢竟這些差異都是原本 CSS 沒有定義的。不過為了讓兩個看起來都一樣,實在蠻痛苦的。
如果,你對這個程式有興趣,歡迎你下載研究,我的程式完全沒有版權問題,你高興怎麼弄就怎麼弄。
但是我 Package 裡面的以下兩個檔案是例外:
- zip32.txt 是郵局提供下載的,非本人所提供。我只是把格式稍微轉換一下,其版權屬中華郵政所有。
- prototype.js 屬於 Sam Stephenson 所撰寫,並非本人所撰寫,所有權力屬於他。
http://gaislab.cs.ccu.edu.tw/~htchang/ajax/zip.tgz
如果你真的下載了,還希望你留個言讓我知道,這樣我看了也比較高興,有任何問題也歡迎在這裡提出來。
引用URL
我對Prototype.js這麼有結構的程式,不大懂使用
想藉由觀看別人怎麼寫出引用prototype.js 使用ajax方式寫出來的範例來學習。
但開始看你的code就遇到了個難題
第一個遇到是:
請問你在zip.html裡js的部分,許多變數都使用了$(變數),這是什麼的意思
可否提點一下?
謝謝
他會自動到 DOM 裡面,去把該變數的值傳回來,
這樣,可以節省一些 Code..
例如,$('xx') 就是,你的一個 Input Text 的 Name
叫 xx,透過這樣去 Access 就簡單多了。
我目前是用PHP+js+mySQL,因為感覺AJAX有很多方便的地方,不過相對的難度還蠻高的,前一陣子是用「xajax」,現在則是prototype,希望有機會讓你看到我的成果,謝謝
剛好可以改成對DB的Qurey check,
真的太感謝了, 以後要常來你這挖寶!
我想要這個程式和程式碼可以嗎?學校老師要我們網路找程式來展示並解說?請問可以給我嗎?
小楷你好~
已經寄過去。
有關郵遞區號這個程式碼可以請你傳給我嗎?我是用java studio 8.1版,
感謝你
太讚了!非常實用的東西!
download ++
thx. a lot
我的功能與你相反,是從路街名來查出 5 碼郵遞區號的。而最大的特色在於這個服務可以「離線瀏覽使用」。
請見 http://zipcode.ho600.com/。
感謝了
正在學習php
剛好有範例可參考
感恩哪
