2011-03-03 28 views
2

你將如何實現在軌道3這條路線,最後穩定版本2.3.9或soish@rails_folks | 「」 http://twitter.com/#!/user/followers」 |請解釋

解釋

我真的不關心追隨者的行動。什麼我真的後如何在路由打造「!#」。

而且,什麼是這一點。它是語法還是語義?

+0

[「/#action」在Ruby on Rails的Routes.rb中路由的可能重複](http://stackoverflow.com/questions/2612118/action-route-in-rou- ter-rb-in-ruby-on -rails) – jdl 2011-03-03 04:07:26

+0

我不認爲它是重複的。 '#'和'#!'有很大的不同。看到我的[答案](http://stackoverflow.com/questions/5176514/rails-folks-http-twitter-com-user-followers-please-explain/5176759#5176759)。 – Anurag 2011-03-03 04:58:43

+0

請*不要這樣做*!它打破了網絡。這個慣例是Google發明的,它允許糟糕的舊版舊應用程序參與Google搜索。這是它的唯一目的。如果你沒有一個糟糕的舊的遺留應用程序,你*不應該使用這個。如果你*有一個糟糕的舊遺留應用程序,你應該*修復它*而不是使用它。底線:只是不要使用這個。 – 2011-03-03 05:44:01

回答

3

Rails不會在#之後直接得到任何東西,而是索引頁用javascript和ma檢查值kes向服務器發送一個基於url的AJAX請求後#。他們在內部使用哪些路線來處理該AJAX請求,我不確定。關鍵是要有一個以Javascript爲動力的界面,其中每個人都在同一個「頁面」上,但hashtag中的數據允許它隨時加載任何自定義數據,並且如果您決定不加載全新的頁面例如查看不同的用戶。

+0

哇。沒有js它會出現'http:// twitter.com /#' – s84 2011-03-03 04:09:11

3

哈希部分永遠不會發送到URL,但操作哈希以維護歷史記錄和爲AJAX應用程序添加書籤是常見操作。唯一的問題是,通過使用散列來避免頁面重新加載,搜索引擎被拋在後面。

如果你有一些鏈接網站,

 
http://example.com/#home 
http://example.com/#movies 
http://example.com/#songs 

你AJAXy的JavaScript應用程序看到#home#movies#songs,並且知道什麼樣的數據,必須從服務器加載和一切工作正常。

但是,當搜索引擎試圖打開相同的URL時,散列被丟棄,並且它總是將它們發送到http://example.com/。因此,您的網站的內部頁面 - 家庭,電影和歌曲永遠不會被編入索引,因爲直到現在還沒有辦法找到它們。

谷歌已經創建了一個AJAX crawling specification或更多像一個合同,允許網站充分利用AJAX的優勢,同時還收穫搜索引擎索引的好處。如果你願意,你可以閱讀這個規範,但是這個規範是一個翻譯過程,它將#!之後出現的所有內容都加入到查詢字符串參數中。

所以,如果您的AJAX鏈接使用#!,那麼搜索引擎會轉化一個URL一樣,

 
http://example.com/#!movies 

 
http://example.com/?_escaped_fragment_=movies 

您的服務器應該看看這個_escaped_fragment_參數和響應就像你的AJAX一樣。

請注意,HTML5的History interface現在提供了更改地址欄路徑的方法,無需依賴散列片段來避免頁面重新加載。

使用pushStatepopState方法

history.pushState(null, "Movies page", "/movies"); 

,你可以直接將URL更改爲http://example.com/movies,而不會導致頁面刷新。搜索引擎可以繼續使用您在這種情況下使用的相同的URL。

0

在URI中的#之後的部分稱爲片段標識符,它由客戶端而不是服務器解釋。你不能路由這個,因爲它永遠不會離開瀏覽器。