哈希标志后获取请求部分

时间:2010-11-25 08:57:01

标签: ruby-on-rails ajax asynchronous request deep-linking

我的网站采用AJAX驱动搜索,使用深层链接。当用户关注链接时......

http://example.com/articles#/?tags=Mac%20OS,review

...标签应该已经在搜索表单中选择了“Mac OS”和“评论”,并且应该在页面上显示与“Mac OS”和“评论”相关的文章。

我有以下情况,需要修复

  1. 用户点击链接http://example.com/articles#/?tags=Mac%20OS
  2. 在初始页面呈现期间,将提取所有文章
  3. 在客户端,解析哈希部分,并且只通过AJAX请求与“Mac OS”相关的文章。
  4. 客户端收到“Mac OS”文章并替换在步骤2中提取的所有文章。此外,它还会在搜索表单上标记“Mac OS”标记。
  5. 这里的问题 - 重复的文章呈现,对用户来说看起来非常糟糕。他查看了所有文章,几秒后,它们将被替换为“Mac OS” - 文章。

    我需要有以下方案:

    1. 用户点击链接http://example.com/articles#/?tags=Mac%20OS
    2. 服务器解析hash-part并返回“Mac OS”相关文章
    3. 客户理解,“Mac OS” - 文章已经存在并且什么都不做。它只是将“Mac OS”标记标记为已选中。
    4. 为此,我需要获取请求字符串的哈希部分:

      /?tags=Mac%20OS
      

      我之后不能使用请求参数,因为我使用AJAX和深层链接。使用?-part,浏览器将被强制重新加载页面。我需要做任何事情而不重新加载页面。

      非常感谢您的帮助。

      感谢。

2 个答案:

答案 0 :(得分:15)

散列后的URL部分未发送到服务器,因此您无法在那里处理它。您可以在创建Ajax请求的客户端代码中提取URL的那一部分,并将其作为参数发送。

答案 1 :(得分:0)

@NickFitz是正确的,但是如果你必须发送#哈希/英镑符号之后的任何内容,你可以使用代表#的URL编码字符%23。 / p>

所以%23以及%23之后的任何内容都将被发送到服务器。如果您使用的是现代网络服务器,他们会自动识别%23#。在Ruby on Rails中,Rack会为您完成此任务。