AJAX 就是 asynchronous Javascript + XML 的縮寫. 其中有時候會牽涉到 DOM (Document Object Model), 因為無論是 XML 或是 HTML, 都會需要一個文件的介面.
Javascript 的歷史悠久, 十幾年前就相當風行, 應該無庸贅述. XML 也行之有年, 為什麼會和 asynchronous Java script 扯在一起呢? 大家可以想像, 如果只是一個靜態的 XML, 可以做的事情畢竟是有限的. 反之, 如果可以和使用者互動, 依據使用者的指令來產生動態的 XML 介面, Javascript 正好可以做這件事. 但此處的 Java 為何會強調 asynchronous 呢? 它主要是指在 client 端和 server 端的 XML 可以是不一樣的, client 端看到的 XML, 並不是 server 端所 generate 出來的, 而是依據 Javascript 所動態生成的. 它最直接的好處就是節省了 server 的計算量以及網路頻寬. 從 client 端透過 SOAP 和 server 端做必要的溝通, 可以使得網路流量只剩 5% (參考 Wiki).
現在很多網路的應用都使用了 AJAX 的技術, 以至於各位所看到的網路頁面, 真正是獨一無二的, 因為連 server 上的那一份都和我們所維護的這個版本不同. 一旦我們想回到上一頁, 重新整理, 或是 IE 突然當掉…, 那個珍貴的畫面就再也回不來了. 比方說我寫 Blog 就會偶爾遇到這款代誌. 後來有很多人寫一些撇步來解決回到上一頁的問題, 不過問題總是比較多, 有利就有弊. 如果肯犧牲 client 端硬碟空間的話, 我想大概甚麼問題都可以解決.
AJAX 一個先天上的難題在於 client 端的狀況百百種, 不一定會使用哪一種瀏覽器, 外掛也不一定會全部都開得好好的, 比方說 Javascript 被關掉了, 很多東西就不對了. 在真實的狀況下, 網路應用可能大部分的功\能都留在 server 上, 把 client 端只當作一個顯示的介面. 這樣可以減少 client 端相容性的問題, 但是 client 端連邏輯判斷的能力都沒有的話, 可以做出來的功\能也就沒甚麼看頭了 (thin client 的 case).
另外值得一提的是, AJAX 的 server 要應付 multi-thread, muti-user, 如果兩個 user 用同一個帳號存取同一個郵箱, server 勢必要做 error handling. 凡此種種都要靠開發套件來幫忙簡化問題, 不然只靠苦工做一套出來 demo 還簡單, 要能夠全面商品話就困難了.
以上是一點點了解, 以後再更正與補充之.