我正在阅读这个关于使用 html 表单发布 JSON 数据的 w3c 文档,并尝试测试它。
我的测试表格如下:
<form action="postjson.php" method="POST" enctype="application/json">
<input type="hidden" name="touser" value="shenkwen" />
<input type="hidden" name="msgtype" value="text" />
<input type="hidden" name="agentid" value="23" />
<input type="hidden" name="text[content]" value="test message" />
<input type='submit' value="submit" />
</form>
以及
postjson.php
的内容
<?php var_dump($_POST);
我期望 $_POST 的值是一个 JSON 字符串,然而,它只是一个普通的 PHP 对象:
array(4) { ["touser"]=> string(8) "shenkwen" ["msgtype"]=> string(4) "text" ["agentid"]=> string(2) "23" ["text"]=> array(1) { ["content"]=> string(33) "test message" } }
我尝试删除
enctype
属性,输出完全相同。然后我回到文档页面,发现上面写着一些内容,表明该标准可能尚未生效。
所以这也是一个关于如何使用W3C网站的问题,在我看来它的一些页面只是草稿。那么这个页面是草稿吗?当我阅读 w3c 上的页面时,如何判断它是草案还是工作标准?最后也是最重要的是,
enctype='application/json'
是否有效?
W3C 发布了许多草案和提案,然后在整个社区内进行讨论。如果草案达到了普遍认为有用的阶段,浏览器供应商将/可能开始实施它。然后,草案通常会进入“推荐”阶段,这意味着 W3C 正式建议浏览器按照规定实现该技术;但当然他们不能扭转任何人的手臂来真正做到这一点。
每个文档都会在其顶部说明其当前状态,并且 http://www.w3.org/TR/ 列出所有当前文档及其状态。您选择的那个在该页面上被列为“过时”和“退休”,并且顶部有一个巨大的横幅,上面写着:
当心。该规范不再处于积极维护状态,并且 HTML 工作组不打算进一步维护它。
所以,不,目前可能没有浏览器实现它。
要跟踪功能的实际可用性,您需要查看第三方资源,例如 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype 和http://caniuse.com.
仅供参考.. 有一种使用 javascript 模仿此功能的巧妙方法。在这里查看我的图书馆:https://github.com/keithhackbarth/submitAsJSON
正如 deceze 回答的那样,该规范不再处于主动维护状态, 我发现这很可悲,现在大多数 API 都使用 JSON,没有人使用最初设计的 Html 表单,因此添加此功能可以消除几乎数百万行类似的代码,并使现代浏览器能够直接与本机现代服务交互,无需一行代码!
也许我在这里有点贪心,但也可以通过允许对表单方法属性进行 PUT 和 DELETE 并找到类似于框架的“目标”的解决方案来允许直接 JSON 响应,从而在没有任何代码的情况下运行一个完整的现代应用程序.