繁体   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