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 碼),如果這個郵遞區號存在,就回傳該郵遞區號的地點。

需求

  1. Prototype.js http://prototype.conio.net/
  2. 郵遞區號表 前往郵局下載
  3. 熟悉 PHP
  4. 熟悉 Javascript
  5. 熟悉 CSS
  6. 熟悉 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

如果你真的下載了,還希望你留個言讓我知道,這樣我看了也比較高興,有任何問題也歡迎在這裡提出來。


  • smallpigchang 發表於樂多回應(17)引用(0)博士生寫日記編輯本文
    樂多分類:學術/學習 │昨日人次:0 │累計人次:2623
    Ads by Roodo! 

    引用URL

    http://cgi.blog.roodo.com/trackback/1020226

    回應文章
    nice code .
    | 檢舉 | Posted by sonia at 2006年08月16日 20:11
    你好!我最近也開始接觸了ajax,透過搜尋引擎逛到您的部落格
    我對Prototype.js這麼有結構的程式,不大懂使用
    想藉由觀看別人怎麼寫出引用prototype.js 使用ajax方式寫出來的範例來學習。

    但開始看你的code就遇到了個難題
    第一個遇到是:
    請問你在zip.html裡js的部分,許多變數都使用了$(變數),這是什麼的意思

    可否提點一下?
    謝謝
    | 檢舉 | Posted by sonia at 2006年08月16日 20:41
    其實那就是 Prototype 提供的 Function
    他會自動到 DOM 裡面,去把該變數的值傳回來,
    這樣,可以節省一些 Code..

    例如,$('xx') 就是,你的一個 Input Text 的 Name
    叫 xx,透過這樣去 Access 就簡單多了。
    | 檢舉 | Posted by 張小P at 2006年08月16日 21:38
    你好,我最近在學prototype,不過一直沒找到如此容易瞭解的範例,非常感謝你的分享。
    我目前是用PHP+js+mySQL,因為感覺AJAX有很多方便的地方,不過相對的難度還蠻高的,前一陣子是用「xajax」,現在則是prototype,希望有機會讓你看到我的成果,謝謝
    | 檢舉 | Posted by HJR at 2007年06月23日 16:26
    太棒了, 這個範例實在太好了!
    剛好可以改成對DB的Qurey check,
    真的太感謝了, 以後要常來你這挖寶!
    | 檢舉 | Posted by 小陳 at 2007年11月7日 08:34

    我想要這個程式和程式碼可以嗎?學校老師要我們網路找程式來展示並解說?請問可以給我嗎?
    | 檢舉 | Posted by 小楷 at 2007年12月26日 11:44

    小楷你好~
    已經寄過去。
    | 檢舉 | Posted by SmallPig at 2007年12月26日 11:59
    感謝你的分享,這的確是Ajax初學的好文章。
    | 檢舉 | Posted by AlvinShih at 2008年01月7日 11:37

    有關郵遞區號這個程式碼可以請你傳給我嗎?我是用java studio 8.1版,
    感謝你
    | 檢舉 | Posted by 小雨 at 2008年01月23日 19:54

    您好,
    謝謝您的分享, 讓我對於ajax有更多的了解,
    是否可以請您把程式碼+zip完整的給我run看看呢?
    orozcohsu@hotmail.com 謝謝您
    | 檢舉 | Posted by 小優 at 2008年05月29日 14:53

    您好,
    謝謝您的分享, 讓我對於ajax有更多的了解,
    是否可以請您把程式碼+zip完整的給我run看看呢?
    tchggyy@yahoo.com.tw 謝謝您
    | 檢舉 | Posted by 小蔡 at 2008年12月4日 23:12
    很有用

    不過你那網址不能下載??@@
    | 檢舉 | Posted by 佳佳 at 2010年02月6日 12:34

    太讚了!非常實用的東西!
    | 檢舉 | Posted by tad at 2010年02月18日 14:47

    download ++

    thx. a lot
    | 檢舉 | Posted by leeada at 2010年06月21日 12:46
    我也寫了一個關於 5 碼郵遞區號的服務,程式碼也是公開的,主要是 javascript 。歡迎您來指教。

    我的功能與你相反,是從路街名來查出 5 碼郵遞區號的。而最大的特色在於這個服務可以「離線瀏覽使用」。

    請見 http://zipcode.ho600.com/
    | 檢舉 | Posted by 何岳峰 at 2010年07月13日 12:05

    感謝了
    | 檢舉 | Posted by shioulo at 2010年08月6日 23:04

    正在學習php
    剛好有範例可參考
    感恩哪
    | 檢舉 | Posted by hsieh at 2011年01月13日 11:11