我正在使用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>
但重新加载整个页面。
答案 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上还有一些其他帖子已经展示了如何做到这一点: