当前位置:  开发笔记 > 编程语言 > 正文

如何从服务器端获取Url Hash(#)

如何解决《如何从服务器端获取UrlHash(#)》经验,为你挑选了4个好方法。

我知道在客户端(javascript)你可以使用windows.location.hash但无论如何都无法从服务器端访问.



1> 小智..:

我们遇到过需要在ASP.Net帖子后面保留URL哈希的情况.由于浏览器默认情况下不会将哈希发送到服务器,唯一的方法是使用一些Javascript:

    当表单提交时,抓取hash(window.location.hash)并将其存储在服务器端隐藏的输入字段中将其放入ID为" urlhash" 的DIV中,以便稍后我们可以轻松找到它.

    如果您需要对服务器执行某些操作,则可以在服务器上使用此值.如果需要,您甚至可以更改它.

    客户端的页面加载,检查此隐藏字段的值.您将希望通过其包含的DIV找到它,因为将不知道自动生成的ID.是的,您可以使用.ClientID在这里做一些技巧但我们发现只使用包装器DIV更简单,因为它允许所有这些Javascript存在于外部文件中并以通用方式使用.

    如果隐藏的输入字段具有有效值,请将其设置为URL hash(window.location.hash again)和/或执行其他操作.

我们使用jQuery来简化字段的选择等等...总而言之,它最终只是一些jQuery调用,一个用于保存值,另一个用于恢复它.

提交前:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});

在页面加载:

var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}

IsHashValid()可以检查" undefined"或其他你不想处理的事情.

此外,$(document).ready()当然要确保使用得当.


很好的解决方案,但GET请求是什么?
@Chris - 但是当你只是在不同的浏览器中粘贴URL时,如何调用form-submit事件(因为它只是一个GET请求)?

2> Mauricio Sch..:

RFC 2396第4.1节:

当URI引用用于对所标识的资源执行检索操作时,通过交叉线("#")字符与URI分离的可选片段标识符包括在检索之后由用户代理解释的附加参考信息.行动已成功完成.因此,它不是URI的一部分,但通常与URI结合使用.

(重点补充)


我很惊讶.我已经阅读了很多关于SPA的内容并且不知道.所以浏览器发送了如此多的敏感信息但不是哈希?我认为它应该在未来......至少作为一个单独的HTTP标头.这是相关的:http://www.onebigfluke.com/2015/01/experimentally-verified-why-client-side.html?m = 1

3> Julien Oster..:

那是因为浏览器不会将该部分传输到服务器,抱歉.



4> 小智..:

可能唯一的选择是在客户端读取它并将其手动传输到服务器(GET/POST/AJAX).关心阿图尔

您还可以在Malcan中看到如何使用后退按钮和浏览器历史 记录

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有