簡體   English   中英

@rails_folks | ” http://twitter.com/#!/user/followers” |請解釋

[英]@rails_folks | ''http://twitter.com/#!/user/followers" | Please explain

您將如何在Rails 3和最新的穩定版本2.3.9或soish中實現此路線?

解釋

我不太在乎追隨者的行為。 我真正想要的是如何在路由中創建“!#”。

另外,這有什么意義。 是語法還是語義?

#之后,Rails不會直接得到任何東西。 相反,索引頁使用javascript檢查該值,並根據#之后的網址向服務器發出AJAX請求。 我不確定他們在內部使用什么路由來處理該AJAX請求。

關鍵是要有一個由Javascript驅動的界面,每個人都在同一個“頁面”上,但是#標簽中的數據允許它動態加載任何自定義數據,並且如果您決定查看其他頁面,則無需加載整個新頁面。用戶。

哈希部分永遠不會發送到URL,但是通常的做法是操縱哈希值以維護歷史記錄,並為AJAX應用程序添加書簽。 唯一的問題是,通過使用散列來避免頁面重新加載,搜索引擎就被拋在了后面。

如果您的網站包含一些鏈接,

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

您的AJAXy JavaScript應用程序可以看到#home#movies#songs ,並且知道必須從服務器加載哪種數據,並且一切正常。

但是,當搜索引擎嘗試打開相同的URL時,哈希將被丟棄,並且始終將其發送到http://example.com/ 結果,您的站點的內部頁面(家庭,電影和歌曲)將永遠不會被索引,因為到目前為止無法訪問它們。

Google已創建了一個AJAX爬網規范,或更像一個合同,該合同允許網站充分利用AJAX的優勢,同時仍可通過搜索引擎獲得索引的好處。 您可以根據需要閱讀規范,但其本質是翻譯過程,它提取#!之后出現的所有內容#! 並將其添加為querystring參數。

因此,如果您的AJAX鏈接使用#! ,那么搜索引擎會翻譯如下網址,

http://example.com/#!movies

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

您的服務器應該查看此_escaped_fragment_參數,並以與AJAX相同的方式進行響應。

請注意,HTML5的“ 歷史記錄”界面現在提供了更改地址欄路徑的方法,而無需依賴散列片段來避免頁面重新加載。

使用pushStatepopState方法

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

您可以直接將URL更改為http://example.com/movies而無需刷新頁面。 搜索引擎可以繼續使用您在這種情況下將使用的相同URL。

URI中#后面的部分稱為片段標識符 ,由客戶端而不是服務器解釋。 您無法路由此路由,因為它將永遠不會離開瀏覽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM