@rails_folks | ''http://twitter.com/#!/user/followers“|请解释一下

时间:2011-03-03 04:03:04

标签: ruby-on-rails ruby twitter routes

你将如何在rails 3和最后一个稳定版本2.3.9或soish中实现这条路线?

解释

我并不关心追随者的行为。我真正想要的是如何在路由中创建'!#'。

此外,这有什么意义。是语法还是语义?

3 个答案:

答案 0 :(得分:3)

Rails在#之后没有直接得到任何东西。相反,索引页面使用javascript检查该值,并根据#之后的URL向服务器发出AJAX请求。他们在内部使用什么路由来处理我不确定的AJAX请求。

关键是要有一个Javascript驱动的界面,每个人都在同一个“页面”,但是hashtag中的数据允许它动态加载任何自定义数据,如果你决定加载一个全新的页面例如,查看其他用户。

答案 1 :(得分:3)

散列部分永远不会发送到URL,但通常的做法是操纵散列来维护历史记录,并为AJAX应用程序添加书签。唯一的问题是,通过使用哈希来避免页面重新加载,搜索引擎被遗忘。

如果您的网站包含某些链接,

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

您的AJAXy JavaScript应用程序会看到#home#movies#songs,并知道它必须从服务器加载哪种数据,一切正常。

但是,当搜索引擎尝试打开相同的网址时,会丢弃该哈希值,并始终将其发送到http://example.com/。因此,您网站的内页 - 家庭,电影和歌曲永远不会被编入索引,因为到目前为止无法访问它们。

Google创建了AJAX crawling specification或更多合同,允许网站充分利用AJAX,同时仍然可以通过搜索引擎获得索引的好处。如果需要,您可以阅读规范,但它的要点是将#!之后出现的所有内容并将其添加为查询字符串参数的翻译过程。

因此,如果你的AJAX链接使用#!,那么搜索引擎会翻译一个类似的网址,

http://example.com/#!movies

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

您的服务器应该查看此_escaped_fragment_参数,并以与AJAX相同的方式响应。

请注意,HTML5的History interface现在提供了更改地址栏路径的方法,而无需依赖哈希片段来避免页面重新加载。

使用pushStatepopState方法

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

您可以直接将网址更改为http://example.com/movies,而不会导致页面刷新。搜索引擎可以继续使用您在此情况下使用的相同URL。

答案 2 :(得分:0)

URI中#之后的部分称为片段标识符,它由客户端而不是服务器解释。你不能路由它,因为它永远不会离开浏览器。