Web Development 的學習之旅

2007/08/29

網頁之間的參數傳遞

不知道有多少人跟我一樣, 在剛接觸 Web Development(javascript) 時, 最想知道的答案的三大問題之一就是: 我要怎麼傳參數到另一個網頁呀 ?

就我目前的學習成果裡, 用了兩種方法, 而這兩種方法適用的地方不同.

一般的網頁利用 location.href


一般網頁是指像以 <a> 開啟的頁面, 可以 href 連結後方加入?的參數, 就像呼叫後端php程式一樣:

<a href="http://domain.com/new_page.html?name=vito&country=taiwan">new page</a>

在new_page.html 被載入後,即可讀取 location.href 取得完整 URL, 然後再利用 parseQuery 做解析工作, 得出參數.


function parseQuery ( query ) {
var Params = new Object ();
if ( ! query ) return Params; // return empty object
var Pairs = query.split(/[;&]/);
for ( var i = 0; i < Pairs.length; i++ ) {
var KeyVal = Pairs[i].split('=');
if ( ! KeyVal || KeyVal.length != 2 ) continue;
var key = unescape( KeyVal[0] );
var val = unescape( KeyVal[1] );
val = val.replace(/\+/g, ' ');
Params[key] = val;
}
return Params;
}

var params = parseQuery(location.href.replace(/^[^\?]+\??/,''));
v1 = params["name"] // vito
v2 = params["country"] // taiwan


註:parseQuery是我在 jQuery 的一個 plugin 內發掘出來的 function, 蠻好用的. 不過後來發現在一些 blog 都有提到這個 function, 所以真正來源目前我不清楚.

AJAX 載入的網頁, 不可使用 location.href, 可運用全域變數


由於使用 ajax 載入的網頁, 並未真的更新網頁, 因此 location.href 不會改變, 也就無法利用 location.href 了, 但也因此表示在 javascript 使用宣告的變數, new_page.html 是可以讀得到的(就像在同一個網頁), 當然, 我們要將全域變數管好啦.

AJAX 載入的網頁, 在 tag 內定義自訂的屬性, 當作參數


很多時候是藉由 click <a>, <img> 等 tag 觸發一個 function, 使用 ajax 技術載入一個網頁, 此時可在這個 tag 定義特殊的屬性, 當 click 觸發 function 時, 再讀取這個 element 的屬性值, 對載入的網頁做變化.

附註:
使用 ajax 載入網頁很困難嗎? 非也, 運用 jQuery, 只要一行 ajax 就收工了:

$("#product_wrapper").load("product_page.html");

假設 html 有個 div tag, id="product_wrapper".
以上 code 的意思是, 將 product_page.html 載入到 id="product_wrapper" 的 element 內.

2007/07/27

Basecamp 使用心得

Basecamp 是一個簡易的 Web 型式專案管理系統, 主旨是促使團隊的協同合作. 它有 messages, to-do list, milestone, writeboard, chat, file 等功能. 團隊成員可在裡面做訊息發佈, 檔案分享

message 其實就是討論區, team member 都可以發佈及回覆, 也提供 email 提醒的功能.
to-do list是待辦事項, 專案經理可以 assign 給某位成員, 並與 milestone 結合, 追蹤進度. writeboard 可以當作一個草稿區塊, 並讓 member 一起參與修改, 用這個功能把網頁內容草稿放在這裡讓客戶直接去改是最好的了. chat 提供多個 chat room, 每個 room 可以容納二位以上的 member 一同 chat, chat 包含了 message 及 talk, 也能即時上傳圖片至 chat room 裡, 使所有參與者看得到. file 就不多講了, 就是檔案上傳啦

以功能來看, 它並不提供很華麗或很龐大的功能, 它的功能都維持在最需要, 最簡單使用的層面上, 但又不忽略解決協同合作時會發生的問題及需求.

不必再管 server 一堆的鎖事, 就像租用虛擬主機一樣的意思. 我只要用它, 發揮出價值即可. Basecamp 的 writeboard, file 都提供版本控制的功能, 會將每次修改的版本都記錄區隔開來, writebord 甚至可以做 compare, 不過這些功能都維持在極簡易使用的型式. 跟有些大型合作軟體內提供的華麗功能, 它是相當樸素的, 不過只要使用者自己覺的夠用, 就好了. 像 compare, 若真的需要高級的 compare, 那我就取出這兩個檔案, 再用 Beyond compare 就好了.

說了一堆它的好話, 不過還是有一點不滿意, 就是它的英文操作介面. 雖然是這樣, 但我在裡面輸入中文並使用中文檔案名稱, 都沒有任可問題, 系統發出的 mail 中文字也能正確顯示. 希望未來會有中文的介面

2007/07/19

放下我執, 站在巨人的肩膀看這美麗世界

早上在看這本"超越式CSS"時, 突然想到一句話: "站在巨人的肩膀上", 沒幾秒鐘又想到了另一句: "放下我執". 瞬間感到有點奇怪, 這兩句話都是耳熟能詳的話, 但今天卻突然同時間冒出來, 沒多久我就瞭解了, 最後得出這句:

放下我執, 站在巨人的肩上看這美麗的世界

在學習的過程中, 會遇到不同世界裡的巨人, 由於主要是靠閱讀, 所以大部份不是真的遇到他們. 最近在閱讀時, 彷彿越來越能置身於其中, 感受巨人們想傳達的美麗世界, 閱讀時當心中愈沒有自我的聲音, 這種感受就愈強.

我的看法是...我的經驗是...我學過的東西是...我想說的是...我...我...都可能會造成障礙, 即所謂的知識障. 想要站在巨人肩上, 必須要放下這些障礙, 與巨人合而為一, 才能瞭解巨人們看到的世界.

這裡不是要說過往的知識與經驗不好, 這不是絕對好與壞的二元概念, 相同的知識或經驗在不同層次下, 會有不同的結果. 因此在才一直以"放下"來描述, 而不是以"放棄"來表達. 對我們而言是好的經驗, 在巨人的世界裡或許就不這麼一回事了, 想站在巨人的肩上, 不只是努力看書學習, 還要磨練自己的心性, 才看得到不同的世界.