首先說明,Ajax InPage Resource Locator這個詞是我自造的,主要的意思就是在QueryString裡添加一部分用於指明在Ajax頁面裡某項內容的具體位置(也可以認為是使用者在頁面進行的操作的記錄)。
為什麼要引入這麼一個東西?
我們開啟一個典型的Ajax頁面,比如:Asp.net Ajax首頁,然後點擊上面的"Get Started",這個過程中瀏覽器的地址欄沒有改變,但具體的內容卻改變了,這會給使用者的交流/收藏帶來很多的困難,遠沒有不使用Ajax時一個URL對應一定的內容方便。想想這樣的情景:你發現了一個好東西,想給朋友分享,但是發出一個連結之後還得告訴他“先點這,再雙擊那,等幾秒,然後點那”,是不是很麻煩?
不僅是使用者之間的交流,而且搜尋引擎及其它程式碰到Ajax時,也會有很大的麻煩。在使用Ajax的網頁上,有很多內容,不對Web Server進行Post(或運行JavaScript),搜尋引擎根本不可能見到,但如果隨便Post(或運行JavaScript),又可能造成稀奇古怪的影響--你不希望你的電子商務網站每天被搜尋引擎莫名其妙地下幾個訂單吧?
如果使用一種方式,給Ajax頁面內目前不能用URL定位的內容分配一個標識,我們就能避免這些問題。
例如,給我們上面提到的內容分配以下URL: http://ajax.asp.net/Default.aspx?&&GetStarted, 然後配合其它手段,就能解決這些問題。這裡的&&GetStarted就是我所說的Ajax InPage Resource Locator。
上面的&&(具體用什麼字串可以討論,這裡只是一個樣本)用於告訴Server端的程式,後面的GetStarted是用來在頁面內部定位內容的,於是伺服器端就能返回正確的內容;
有了能直接定位內容的URL,我們就可以在頁面上提供比較精確的“分享本頁內容”“收藏”等功能了;
對於搜尋引擎,我們可以採用類似Google搜尋結果頁面的技術:在使用者操作之前,連結的Href是正常的HTTP URL,點擊它時變成另外的(比如 javascript:__doPostBack...)。這樣一來我們不但能得到更好的SEO,而且順帶提升了對瀏覽器的相容性(不支援javascript的瀏覽器也能使用)。
大家覺得我的想法如何?
另外,我覺得不但Ajax頁面可以使用這個技術,普通的需要PostBack的Asp.net等頁面也可以使用。
其實PostBack/Ajax等,我覺得是用於“使用者互動”,而不是“資訊發布”的,在前者中根本就不需要有URL來定位其中的一個步驟/動作。但現實是很多用於“資訊發布”的系統也使用了這些PostBack/Ajax技術,誰又能簡單地指責這樣做的人錯了呢?