举例详解HTML5中使用JSON格式提交表单


Posted in HTML / CSS onJune 16, 2015

以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始。而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端。服务器端接收到的数据是直接可以使用的合格JSON代码。如何声明以JSON格式提交表单

大家应该对如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="multipart/form-data" 声明,就是告诉浏览器要按上传文件模式发送表单数据。而JSON格式提交表单的声明与此类似,它的写法是: enctype='application/json'。
对老式浏览器的兼容

以JSON格式提交表单是HTML5中一种很新的规范,只有实现了这些规范的现代浏览器才能识别 enctype='application/json'的语义,才能正确的将表单数据打包成JSON格式。而对于一些老式浏览器,以及还未实现这些标准的浏览器,它们无法识别 enctype='application/json'代表什么,于是表单的enctype会自动退化成application/x-www-form-urlencoded缺省编码格式。服务器端代码可以根据enctype的值来判断如何接收数据。
JSON编码格式提交表单的格式范例
例1 基本用法

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.   <input name='name' value='Bender'>  
  3.   <select name='hind'>  
  4.     <option selected>Bitable</option>  
  5.     <option>Kickable</option>  
  6.   </select>  
  7.   <input type='checkbox' name='shiny' checked>  
  8. </form>  
  9.     
  10. // 生成的Json数据是   
  11. {   
  12.   "name":   "Bender"   
  13. , "hind":   "Bitable"   
  14. , "shiny":  true   
  15. }  

例2 当表单存在多个重名的表单域时,按JSON数组编码

   

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.       <input type='number' name='bottle-on-wall' value='1'>  
  3.       <input type='number' name='bottle-on-wall' value='2'>  
  4.       <input type='number' name='bottle-on-wall' value='3'>  
  5.     </form>  
  6.         
  7.     // 生成的Json数据是   
  8.     {   
  9.       "bottle-on-wall":   [1, 2, 3]   
  10.     }  

例3 表单域名称以数组形成出现的复杂结构

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.   <input name='pet[species]' value='Dahut'>  
  3.   <input name='pet[name]' value='Hypatia'>  
  4.   <input name='kids[1]' value='Thelma'>  
  5.   <input name='kids[0]' value='Ashley'>  
  6. </form>  
  7.     
  8. // 生成的Json数据是   
  9. {   
  10.     "pet":  {   
  11.         "species":  "Dahut"   
  12.     ,   "name":     "Hypatia"   
  13.     }   
  14. ,   "kids":   ["Ashley", "Thelma"]   
  15. }  

例4 在上面的例子中,缺失的数组序号值将以null替代

   

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.       <input name='hearbeat[0]' value='thunk'>  
  3.       <input name='hearbeat[2]' value='thunk'>  
  4.     </form>  
  5.         
  6.     // 生成的Json数据是   
  7.     {   
  8.         "hearbeat":   ["thunk", null, "thunk"]   
  9.     }  

例5 多重数组嵌套格式,嵌套层数无限制

   

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.       <input name='pet[0][species]' value='Dahut'>  
  3.       <input name='pet[0][name]' value='Hypatia'>  
  4.       <input name='pet[1][species]' value='Felis Stultus'>  
  5.       <input name='pet[1][name]' value='Billie'>  
  6.     </form>  
  7.         
  8.     // 生成的Json数据是   
  9.     {   
  10.         "pet":  [   
  11.             {   
  12.                 "species":  "Dahut"   
  13.             ,   "name":     "Hypatia"   
  14.             }   
  15.         ,   {   
  16.                 "species":  "Felis Stultus"   
  17.             ,   "name":     "Billie"   
  18.             }   
  19.         ]   
  20.     }  

例6 真的,没有数组维度限制!

   

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.       <input name='wow[such][deep][3][much][power][!]' value='Amaze'>  
  3.     </form>  
  4.         
  5.     // 生成的Json数据是   
  6.     {   
  7.         "wow":  {   
  8.             "such": {   
  9.                 "deep": [   
  10.                     null   
  11.                 ,   null   
  12.                 ,   null   
  13.                 ,   {   
  14.                         "much": {   
  15.                             "power": {   
  16.                                 "!":  "Amaze"   
  17.                             }   
  18.                         }   
  19.                     }   
  20.                 ]   
  21.             }   
  22.         }   
  23.     }  

例7 文件上传

   

XML/HTML Code复制内容到剪贴板
  1. <form enctype='application/json'>  
  2.      <input type='file' name='file' multiple>  
  3.    </form>  
  4.        
  5.    // 假设你上传了2个文件, 生成的Json数据是:   
  6.    {   
  7.        "file": [   
  8.            {   
  9.                "type": "text/plain",   
  10.                "name": "dahut.txt",   
  11.                "body": "REFBQUFBQUFIVVVVVVVVVVVVVCEhIQo="   
  12.            },   
  13.            {   
  14.                "type": "text/plain",   
  15.                "name": "litany.txt",   
  16.                "body": "SSBtdXN0IG5vdCBmZWFyLlxuRmVhciBpcyB0aGUgbWluZC1raWxsZXIuCg=="   
  17.            }   
  18.        ]   
  19.    }   
HTML / CSS 相关文章推荐
css3模拟jq点击事件的实例代码
Jul 06 HTML / CSS
10分钟入门CSS3 Animation
Dec 25 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
Jul 09 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
Nov 27 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 HTML / CSS
html5适合移动应用开发的12大特性
Mar 19 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
Mar 22 HTML / CSS
html5组织内容_动力节点Java学院整理
Jul 10 HTML / CSS
HTML5表单验证特性(知识点小结)
Mar 10 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
Aug 20 HTML / CSS
Html5调用企业微信的实现
Apr 16 HTML / CSS
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
Oct 16 HTML / CSS
带你认识HTML5中的WebSocket
May 22 #HTML / CSS
用HTML5制作视频拼图的教程
May 13 #HTML / CSS
用HTML5制作一个简单的弹力球游戏
May 12 #HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
May 12 #HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
May 12 #HTML / CSS
用HTML5制作烟火效果的教程
May 12 #HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
May 12 #HTML / CSS
You might like
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
优秀实习生感言
2014/03/01 职场文书
阳光体育活动总结
2014/04/30 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
2014年党建工作总结
2014/11/11 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang