在链接中的查询字符串中使用哈希符号

时间:2015-07-14 21:07:38

标签: php

我的网站上有一个“下一步”按钮,代码为......

<a href="example.php?action=next#mark" ><img src="images/next-button6.png" class="button"/></a>

在“下一个”操作发生后,哈希符号应该将其带到页面的特定部分。 (下一步行动将转到$ _SESSION数组中的下一篇博文)

没有散列,一切都很好用,但是使用散列它只会转到页面的一部分,而不会真正刷新页面。

这是正常的吗?如果是这样,你怎么解决它?

更新:

优秀的信息人。我使用了以下解决方法。

if ($_GET["x"]==1) $x = "&amp;x=0";
    else $x = "&amp;x=1";

我只是在链接的末尾添加$ x(在放入#mark之前)。很简单,但它有效!

1 个答案:

答案 0 :(得分:1)

这是正常行为,它是那些哈希(或'fragment identifiers')的用途。

随着时间的推移,他们被使用(滥用)来更改Web应用程序和AJAX丰富页面中的URL,因此页面上的脚本可以将它们用作书签,以记住要显示的页面的哪个部分(当用户在历史中来回导航时。 他们使用此片段标识符的原因是因为它曾经是您可以更改的网址的唯一部分,而不强制重定向到新网址。

最终,通过在history API中引入pushStatepopState方法,这种解决方法已经过时,但有时仍会使用哈希来实现向后兼容性。

所以我认为你的困惑可能来自。

无论如何,它应该像这样工作。如果您不想这样做,请使用与#符号不同的字符,或使用JavaScript通过设置location.href或致电location.reload()来强制重新加载页面。请注意,由于片段标识符不是(或不总是)发送到服务器,因此不要在服务器端脚本中依赖它,因此即使使用JavaScript,您仍然必须将相关信息放在另一部分中的网址。我认为最佳解决方案是:使用query string将此类信息发送到服务器。

即使使用查询字符串或JavaScript,您仍然可以添加#片段,以便浏览器知道在加载新页面后要跳转到哪个部分。