2007年8月1日 星期三

這不是很簡單嗎 ?....Auto Complete.....@@

Auto Complete - 在 text input 打字,系統幫忙(以 ajax) 從系統撈資料補字的功能。
現在在各大網站上都十分常見,最近我們也要自已開發一個。

乍聽之下,會覺得… "不是很簡單嗎"? 只要在text input bind keyup 事件,就可以在key up 的同時,送出 ajax call 去後端撈資料,送回來後畫在一個黏在text input 下面的div 裏 - 結束。

不過,實作之後,發現總是有怪怪的現象,比如,回應速度不均 - 網路delay jitter 有差;或者補的字和你打的字無關 - Ajax (Asynchronous) 不同步的回應。等等小細節,卻會讓auto complete這個功能變得十分難用。到了一種沒有比有好的悲慘地步。

後來採用 scriptaculous這個js 的套件來幫忙,總算順多了。仔細來看看這個套件怎麼做的? - 其實也很簡單,就是每隔固定的時間,比如0.5 秒之類的,先比對text input 裏的資料有沒有改動,有則去後端撈資料,沒有則不做事;並且,猜測它應該有處理不同步回應的問題,因為記下了「上一個 query」,也可以判斷拿到手的非同步回應是不是過時的。

嗯,總之,寫這種 ajax 的東西,絕對要考慮網路延遲和非同步的問題,這是和以往做 server side 技術不同的地方。

沒有留言: