hip*_*ail 7 jquery key-value url-parameters wikipedia-api mediawiki-api
a的query
一部分URL
似乎由分隔&
和关联的键值对组成=
.
我总是使用jQuery的$.param()
函数对我的查询字符串进行URL编码,因为我发现它使我的代码更具可读性和可维护性.
在过去的几天里,我发现自己正在调用MediaWiki API,但在使用硬编码的URL清理我的工作原型时,$.param()
我注意到一些MediaWiki API包含带键而不是值的查询参数!
请注意该部分&redirects
,它没有任何价值.
jQuery $.param()
采用一个对象,因为对象只包含键值对,所以不可能传递一个成员有一个键但没有值的对象.
这很好,所以我假设我可以传递一些值,例如null
或者undefined
或者0
似乎所有这些都被视为相似.我发现这令人惊讶,我无法在MediaWiki API文档中发现有关此背后的原因的任何内容.
好吧,通过手动构建URL字符串,我可以很容易地解决这个问题.我的问题是"这是MediaWiki API中的一个怪癖吗?或者是URL编码设计中的一个怪癖?我应该阅读哪些内容来理解没有相关值的URL编码参数背后的原因?
最有可能他们正在做的只是检查参数是否已定义.通过添加redirects
到查询字符串,有效地说"重定向变量为真".因此,增加redirects=0
仍然定义变量,以及MediaWiki的API被指出的是,它被定义(不关心的值是什么).
您的jQuery代码只需要附加该参数(带有任何值,或没有值),或者如果您不希望它被定义,则省略它.
只是问这个问题并得到其他人的一些反馈也促使我进一步挖掘。
- 每个字段值对都用等号分隔。如果值为空字符串,则可以省略等号。
查询字符串在RFC 3986 的 3.4 节中定义,但实际上键值对并不是标准的一部分,只是简单提及:
然而,由于查询组件通常用于以“键=值”对的形式携带标识信息,并且一个经常使用的值是对另一个 URI 的引用,因此有时避免对这些字符进行百分比编码会更好地提高可用性。
正如您所看到的,与键值的存在或不存在无关。
至于 jQuery,事实证明,在过去 15 个月里,已经提交了两份关于此行为的错误报告/功能请求:
param: null
就是否将和转换param: undefined
为param
或提出了各种建议param=
。
最后,jQuery 的下一个版本 1.8 包含了一个修复程序,它将null
和转换undefined
为param=
- 空字符串。
这当然有一定道理,但对于 MediaWiki 的情况来说,错误报告/功能请求中没有提到,这根本没有帮助:
http://en.wikipedia.org/w/api.php?action=query&titles=Main%20page&redirects=
回报
<?xml version="1.0"?>
<api>
<query>
<redirects>
<r from="Main page" to="Main Page" />
</redirects>
<pages>
<page pageid="15580374" ns="0" title="Main Page" />
</pages>
</query>
</api>
Run Code Online (Sandbox Code Playgroud)
标准没有定义这里应该做什么,而是由实现决定。MediaWiki API 做了一件事,jQuery 最初忽略了它,然后当它被指出时,做了另一件事。两方似乎都不认识对方。
规范中的缺陷导致了不兼容的解释……但解决它们并不难。
归档时间: |
|
查看次数: |
2950 次 |
最近记录: |