2011年6月23日 星期四

還魂

放學後,吃晚餐時,賈伯伯又提起另一個故事,也是我「唯二」記得的故事。第一個是上一篇的輕功,這是第二篇。

關於賈伯伯請參考輕功這篇文章:


國民黨要找人當兵,小柱(賈伯伯)二話不說就去參加了。他跟家裡說,戰亂時代當兵最好,有吃有住還有糧餉。等過幾年戰爭結束了,他也存夠了錢,就可以回家蓋房娶妻了。


加入了軍隊後,跟著到處打土八路。常有弟兄在戰爭中陣亡,也常有新夥伴加入。有天來了一個弟兄,跟小柱差不多年紀,20來歲。平常沉默不語,老是對著天發呆,又常常唉聲嘆氣,行為舉止一點也不像年輕人應有的活力,倒像4、50歲的人。他姓李,因為他的舉動古怪,隊上的人都叫他李佬,他不引以為意,反倒像是應該的。


那天軍隊來到一個小村莊,行經一座圍牆時,李佬突然不走了,逕自站在那裏,過了一會竟然還哭了起來。這個舉動讓大夥愣住了,帶頭的班長,看到部隊停下來,氣的大聲開罵。聽到李佬在哭,損及革命軍人形象,更是氣的一巴掌往李佬臉上刮去,大罵『你發甚麼神經病,哭個屁阿。』隨即用家鄉土話足足罵了一大串。趁著班頭剛罵完換氣,尚未繼續罵之前,這時候李佬回話了: 『我的屍體埋在這裡。』


這短短的一句話,讓原本騷動的部隊,霎那間安靜下來。

班頭又一個巴掌挂過去:『你是豬頭瘋嗎,再講一次。』


這次李佬用近乎咆嘯的聲音回答: 『我沒騙你,我的屍體真的埋在這裡,就在這座圍牆邊,不信你去挖。』


也不知道安靜了多久,有個好事的弟兄終於說話了: 『那就挖吧,看看是真是假。』接著其他弟兄也跟著起鬨,班頭沒考慮多久,就說: 『挖。我看你到底搞甚麼鬼。』


那個好事的弟兄吆喝著另外兩個人,就這麼三個人跑去挖了。挖了約半個腿高後,真的挖到一具身著藍布衫的骨骸。


大夥不可置信地看著李佬,只見他喃喃自語: 『陳禾,4年前死於盜匪之手。幸得大仙相助,一絲遊魂投身於此軀體。』說完,便脫掉上衣,將挖出的遺骸包起來,然後帶著離開。


眾人看得目瞪口呆,等到回過神來後,小柱第一個發難,口中喊著李佬,要跑過去將他帶回來,結果卻被班頭攔住,班頭只講了一句話:『讓他走,他已死了。』


『後來呢? 』我趁著嘴巴空檔時,問著賈伯伯。


『哪有後來,他就走了阿。沒人知道他去哪,也沒有人會追究他去哪,他只是變成我們茶餘飯後的話題。』賈伯伯說著。


『喔~~』我繼續吃著我的晚餐。


『李佬是借屍還魂囉。』我提出我的問題,嘴巴還在吃著東西。


『應該是吧,他也沒說他投的這個身體是誰的,只說大仙幫他投的,也不知道哪位大仙。』


『喔~~』我繼續吃著我的晚餐。


後記:

賈伯伯原本只是要當個幾年兵,這一當兵,跟著國民黨南征北討,誰知道最後竟落腳在台灣。離家40個年頭後,兩岸開放,賈伯伯才有幸得以回去2次,第一次回去探親,第二次回去就直接住下來,完成他回鄉落葉歸根的心願。

2011年6月17日 星期五

AJAX基礎運作說明

我在找AJAX基礎文章,但是我慧根不夠,老是有看沒有懂。參考兩本書對照之後,總算理出一點頭緒。趁著還有一點印象之前,我用我能理解的方式,做個筆記紀錄一下,免得以後要用時又忘了。


傳統的網頁請求模式,是將整個頁面傳送回Server。而Server整理用戶端的回應後,將整個頁面再全部傳送回給用戶端。


AJAX請求模式,用戶端只有要請求的資料,透過XHR(XMLHttpRequest)這個物件傳送到Server,不再是整個頁面。


Server也不再將整個頁面做回應,它只將要回應的資料,透過XHR送回用戶端。 而XHR擺在頁面上的甚麼地方,就只有那個地方會產生回應資料。大幅減少資料頁面回應的更新。


 
如果上面還看不懂,舉例來說:


你的電腦風扇壞了,因為你不懂如何修電腦,只好將整台電腦搬到維修公司更換風扇,然後再整台搬回來。

後來,你請了一個助手,他懂如何修電腦。風扇再次壞掉,他只要到維修公司去買了一個風扇回來更換,你的電腦就修好了。XHR就是這位助手。


目前各大瀏覽器及伺服器都支援XHR物件,若XHR執行有問題,先檢查瀏覽器或伺服器是否太舊,導致無法執行。


XHR基本使用方式:

1. 產生一個XHR物件

2. 將用戶端請求,利用XHR物件傳送到Server

3. Server收到後產生回應,將結果回傳。

以下的範例是,當你按下一個按鈕後,XHR會呼叫abc.txt文字檔案,並將內容產生於螢幕上:

============

<html>
<head>
<title>XMLHttpRequest Test</title>
<meta http-equiv="Content-Language" content="zh-tw">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
<script type="text/javascript">

//一、這是一個產生XHR物件標準的函式,檢查瀏覽器是否
//支援ActiveX的XHR物件,若不支援,則使用JavaScript原
//生XHR物件。

var xmlHttp;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}  


//二、這個函式是當用戶端按下按鈕時,XHR會開啟abc.txt檔案

function startRequest()
{
    createXMLHttpRequest();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttp.open("GET", "abc.txt", true);  
    xmlHttp.send(null);  
}

//三、XHR會在Server回應readyState == 4(完成),status = 200
//(HTTP對應OK)後,因為是文字檔,以”responseText”方法,將
//資料產生在名為”disp”的ID上。

function handleStateChange()
{
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {           
         document.getElementById("disp").innerHTML=xmlHttp.responseText;        
        }
    }
}
</script>
</head>
<body>
   <form action="#">
   <input type="button" value="click me" onClick="startRequest();" />
   <div id="disp"></div>
   </form>
</body>
</html>

===========

將範例搞清楚後,再查看網路上XHR所提供的其他方法及屬性,應該就比較清楚如何應用了。

我還在努力了解AJAX中,一起加油吧。