我刚刚访问website,我发现他们在网址中有一个奇怪的查询字符串结构,它们似乎是键值对,当你在网站表单中进行更改时,值会更新URL。
以下是网址:
http://www.holidaysplease.co.uk/holiday-finder/#{"d":"2016-06-1","a":[],"t":20,"r":200,"f":13,"tr":180,"s":[5,4,3],"ac":[],"c":[],"sh":[],"dh":[],"du":null,"b":"500-4407"}
有谁知道这个概念叫什么?我记得曾经在基于Java的Web应用程序中看过它,但有人可以向我保证这是如何实现的以及用什么语言实现的?
答案 0 :(得分:0)
看起来这是一个片段标识符。
维基百科says: 由散列标记#引入的片段标识符是文档的URL的可选的最后部分。它通常用于标识该文档的一部分。通用语法在RFC 3986中指定.URI中的哈希标记分隔符不属于片段标识符。
RFC 3986定义为here。
之前,我以前从未见过。最重要的信息是一些研究给我的回馈。我希望这不是完全错误的。
答案 1 :(得分:0)
URL中#
之后的文本是片段标识符,通常用于引用文档中的某个部分,但可以包含任何不会在请求中发送的数据服务器,但客户端可以使用JavaScript读取。
在您的示例中,片段标识符包含用JSON编码的数据结构,这是支持键值对和数组的序列化格式。
这里以更易读的形式提供了您示例中的JSON:
{
"d": "2016-06-1",
"a": [],
"t": 20,
"r": 200,
"f": 13,
"tr": 180,
"s": [
5,
4,
3
],
"ac": [],
"c": [],
"sh": [],
"dh": [],
"du": null,
"b": "500-4407"
}
答案 2 :(得分:0)
这背后的概念是用户输入的数据作为URL中的JSON structure
发送到服务器。服务器将字符串作为JSON读取,并处理请求。
此过程在WebForm
中非常有效,可以使用名为encodeURIComponent
的方法完成。
我想你注意到,当日期发生变化时,它只会更新URL中的JSON。因此,他们以JSON格式将填充的数据发送到服务器。
在您的网址中
d - days and year
du - duration
a - holiday type
t - temperature
r - rainfall
f- fight time
tr - travel
s - star for the hotels
b - budgets
希望这些信息可以帮助您:)
答案 3 :(得分:0)
#
之后的部分称为fragment identifier。客户端javascript代码可以使用location.hash
访问片段的内容。在这种情况下,片段包含json数据。浏览器通常甚至不会将片段发送到Web服务器,因此它只用于客户端。
片段标识符的最常见用途是使用它的id
属性链接到网页上的特定元素。这用于维基百科文章的小节:
https://en.wikipedia.org/wiki/Fragment_identifier#Basics
当片段包含json时,您可以通过打开浏览器的javascript控制台并调用此代码来检查数据。
JSON.parse(location.hash.substr(1))
单页应用程序可以使用这种方案在URL中存储状态,以便您可以将其加入书签并共享URL。