Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以有一个带有数字的、可能相等(非唯一)键的URL查询吗?_Javascript_Query String - Fatal编程技术网

Javascript 我可以有一个带有数字的、可能相等(非唯一)键的URL查询吗?

Javascript 我可以有一个带有数字的、可能相等(非唯一)键的URL查询吗?,javascript,query-string,Javascript,Query String,我正在构建一个HTML5单页应用程序,我希望允许用户保留当前应用程序状态以供以后使用。我想通过创建一个指向我的页面的链接URL来实现这一点,其中包含一个巧尽心思构建的查询部分。当再次调用URL时,应用程序将解析查询部分并重新创建存储状态 现在,状态的某些部分是一个列表,其项是数值和关联的文本。浮点数值以及文本不要求唯一 像这样: 4.54 first 12.1 another 12.1 more 34 more 我的目的是创建如下URL: www.myappdomain.com/S

我正在构建一个HTML5单页应用程序,我希望允许用户保留当前应用程序状态以供以后使用。我想通过创建一个指向我的页面的链接URL来实现这一点,其中包含一个巧尽心思构建的查询部分。当再次调用URL时,应用程序将解析查询部分并重新创建存储状态

现在,状态的某些部分是一个列表,其项是数值和关联的文本。浮点数值以及文本不要求唯一

像这样:

4.54  first
12.1  another
12.1  more
34    more
我的目的是创建如下URL:

www.myappdomain.com/SinglePage.html?4.54=first&12.1=another&12.1=more&34=more
这是合法的URL吗?如果对文本进行正确编码,这在野外是否有效?

我已经读过了,我通常可以推荐关于URL和这个

对我来说,这样做似乎是合法的,但我仍然感到有点不舒服,因为我没有找到关于我可能拥有的非唯一键的信息,也没有找到关于一般查询部分中作为键的数字的信息

编辑:我已经把它带到了工作中,请看下面(如果链接中断,请告诉我):

我认为传递数据不是一种好方法,查询字符串参数通常被视为可以通过其名称访问的参数,在这里,您实际上可以将一些数据作为参数传递,而从技术角度看,这是可以做到的,这会使您的代码有些混乱,我将使用JSON编码在单个参数中传递此数据

这是URI规范规定的合法URL--。然而,这是否能在野外工作是另一个问题,因为规范只定义了URI的通用语法


由于没有关于查询部分中的重复键应该做什么的规范(请参阅),不同的软件框架将以不同的方式对待此类URI。但是,大多数框架将正确地将重复的键检测为具有相同键的多个值,并将这些值分组到给定键的单个数组/值列表中(而不是将最后一个值与给定键一起使用,并丢弃该键以前的所有值)。使用数字作为键也可以,因为键被解析为文本字符串。简言之:你应该是安全的

这篇文章表明,没有任何规范规定非唯一密钥无效

我似乎找不到关于数字键的任何具体内容

但是,如果您不想出于任何原因使用非唯一的数字键,这可能是一种解决方法:使用一些基本编码将数字映射到字符串。基本的东西可以是1-a,2-b,3-c,4-d,9-i,0-j。“.”可以是“k”(如果没有关于“.”在URL参数中是否为合法字符的规范)
然后,例如,
21.3
将编码为
bakc
。您还可以在编码密钥的末尾添加一个数字,以确保密钥是唯一的。这些数字在解码时会被忽略(或者有助于区分参数)。然后前一个21.3将编码为bakc1,下一个bakc2等)

感谢rfc链接,您可以随时切换到使用矩阵URL参数(鸭子和逃跑)。就我阅读的查询部分(第3.4节)而言,key=value方案甚至不是强制性的!这就是我目前的做法——将列表(从技术上讲是一个数组)字符串化,并将其url编码为一个大值。然而,这种方法会创建相当大的URL,我想让它们更小。你可以使用类似这样的d=4.54:first,12.1:Other,12.1:more,34:more这样你的开销只有2个字节,而不是像MichaelT给出的解决方案那样传递这个值作为参数。这看起来是相当多的工作,并不会使事情变得更简单。是的,在发布我的解决方案后,我对该解决方案进行了投票:)无论如何,我发布的内容在其他场景中可能会有用。