在url中传递多个类似哈希的参数

时间:2011-08-13 07:30:54

标签: jquery ajax url parameters

我正在使用jQuery和Ajax构建一个动态网站。我使用 History Plugin 解决了历史问题和后退按钮。我想在url中传递多个hash like参数,而无需在click事件上重新加载整个页面。我想要这样的东西:

  • something.php#type=abc&id=123
  • something.php/?type=abc&id=123 ...

这可能是在网址中传递和检索此类有关参数的最佳方法吗?

<a href="#type=abc&id=123">Click</a>
if(type==abc && id==123)
{
    do this..
}

通常我们这样做,<a href="something.php?type=abc&id=123">Click</a>但重新加载整个页面。

2 个答案:

答案 0 :(得分:9)

哈希值具有一组有限的字符,技术上允许它们在其中。如果你在这里查看URL spec,哈希值称为fragmentid。这是它可以包含的语法:

fragmentid              xalphas
xalphas                 xalpha [ xalphas ] 
xalpha                  alpha | digit | safe | extra | escape
safe                    $ | - | _ | @ | . | &  | + | -
extra                   ! | * |  " |  ' | ( | )  | ,
escape                  % hex hex
alpha                   a | b | c | d | e | f | g | h | i | j | k |
                        l | m | n | o | p | q | r | s | t | u | v |
                        w | x | y | z | A | B | C | D | E | F | G |
                        H | I | J | K | L | M | N | O | P | Q | R |
                        S | T | U | V | W | X | Y | Z   
digit                   0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

除非在设置或检索哈希值时调用encodeURIComponent和decodeURIComponent,否则您会注意到&,而不是=

至于使用什么技术,这取决于你。如果需要在那里表示多个参数,可以在哈希值中创建自己的小语法。我个人可能会将这些值与&分开,就像查询字符串一样,但请使用-代替=

答案 1 :(得分:3)

就URI而言,你实际上可以做你想要的事情。

@ jfriend00是正确的,因为你不能在给定哈希值的名称/值中使用“=”,但是,我认为他们误读了关于实际意味着什么的规范。您也不能在URL的查询字符串中的名称/值中使用“=”字符。为什么?因为它在表示键/值对时具有特殊含义。它在hash(aka fragmentid)中起到了同样的作用,这正是你在例子中使用它的方式。

如果你看一下w3.org page for media fragments,第三句话就说明了:

  

语法基于特定名称 - 值对的规范,可以在URI片段和URI查询请求中使用,以将媒体资源限制为某个片段。

请注意,它可以为查询和URI的哈希部分使用键/值对。如果你看further down in the page,你会发现它描述的格式完全与你在fragmentid中使用它一样:

  

名称 - 值对列表在URI的查询或片段组件中进行编码。名称和值组件由等号(=)分隔,而多个名称 - 值对由&符号(&amp;)分隔。

话虽如此,JavaScript没有以结构化方式访问键/值对的内置方法(就像它没有内置方式来访问查询的键/值对串)。所以,你必须构建自己的函数才能做到这一点,并且StackOverflow上还有一些其他帖子已经展示了如何做到这一点: