zoukankan      html  css  js  c++  java
  • Form表单 JSON Content-type解析

    Form表单 JSON Content-type解析

    1 表单Form概述

    在Form表单中,参数一般有:
    	action    表单提交的url
    	method    提交方式:post  get
    	name      表单的属性名
    	enctype   提交数据的编码格式
    

    2 常见的编码方式与语法

    在Form表单中,enctype表明提交数据的格式 用 enctype 属性指定将数据回发到服务器时浏览器使用的编码类型.
    常见的编码方式:
    
    1  application/x-www-form-urlencoded:
    概述: 当action为get,数据被编码为名称/值对,是标准的编码格式,也是默认的编码格式
    格式:name1=value1&name2&value2  把form数据转换成一个字串,然后把这个字串append到url后面,用?分割,加载这个新的url
    
    2  multipart/form-data:
    概述:当action为post时,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上ContentDisposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。file或者img等发生上传文件时,设置entype = 'multipart/form-data',是上传二进制数据,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。form里面的input的值以2进制的方式传过去,所以request就得不到值了。
    

    3 form表单提交方式

    1  无刷新页面提交表单:表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为info,iframe的name名称也为info,form提交目标位当前页面iframe则不会刷新页面。
    
      <form action="/url.do" method="post" target="targetIfr">
      <input type="text" name="name"/>
      </form>   
      <iframe name="targetIfr" style="display:none"></iframe> 
    
    2 通过type = submit 提交或者  <button type='submit'> :一般表单提交通过type=submit实现,<input type="submit">,浏览器显示为button按钮,通过点击这个按钮提交表单数据跳转到/url.do
      <form action="/url.do" method="post">
         <input type="text" name="name"/>
         <input type="submit" value="提交">
      </form>
    
    3 js提交form表单:js事件触发表单提交,通过button、链接等触发事件,js调用submit()方法提交表单数据,
    	jquery通过submit()方法
      
      <form id="form" action="/url.do" method="post">
       <input type="text" name="name"/>
      </form>
      js: document.getElementById("form").submit()
      jquery: $("#form").submit()
     
    4 ajax异步提交表单数据 :采用ajax异步方式,通过js获取form中所有input、select等组件的值,组成Json格式,通过异步的方式与服务器端进行交互,一般将表单数据传送给服务器端,服务器端处理数据并返回结果信息
       
      <form id="form"  method="post">
       <input type="text" name="name" id="name"/>
    </form>
      var params = {"name", $("#name").val()}
     $.ajax({
          type: "POST",
          url: "/url.do",
          data: params,
          dataType : "json",
          success: function(respMsg){
          	#处理函数
          }
       });
       
    5 页面无跳转:如果通过form表单提交请求服务端去下载文件,这时当前页面不会发生跳转,服务端返回void,通过response 去写文件数据,页面会显示下载文件。
    <form action="/url.do" method="post">
       <input type="text" name="name"/>
       <input type="submit" value="提交">
    </form>
    
    @RequestMapping(value = "/url")
        public void exportFile(HttpServletRequest req, HttpServletResponse response, String rptId)
                throws Exception {
            OutputStream out = null;
            try {
                String rptName = "file";
                String fileName = new String((rptName + excelAble.getFileSuffix()).getBytes("GBK"),
                        "8859_1");
                response.reset();
                response.setContentType("application/octec-stream");
                response.setHeader("Content-disposition", "attachment; filename=" + fileName);
                out = response.getOutputStream();
                excelAble.exportFile(out);
            } catch (Exception e) {
                logger.error(e);
            } finally {
                if (out != null) {
                    out.close();
                }
            }
        }
        
    6  form表单上传文件:使用form表单进行上传文件需要为form添加enctype="multipart/form-data" 属性,除此之外还需要将表单的提交方法改成post,如下 method="post", input type的类型需要设置为file.
    <form action="/url.do" enctype="multipart/form-data" method="post">
         <input type="file" name="name"/>
         <input type="submit" value="提交">
    </form>
    

    4 Content-type接口应用

    	一般的服务端语言如python,它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以POST 提交,包含了 Content-Type 和消息主体编码方式两部分。
    
    Http Header里的Content-Type一般有:
      application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式
      multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分
      text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符
      application/json:作为响应头Content-Type,用来告诉服务端消息主体是序列化后的 JSON 字符串,JSON 格式支持比键值对复杂得多的结构化数据。
    
    form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。
    

    5 json概述

    JSON:JAVAScript Object Notation是一种轻量级的数据交换格式
    大致分为三种情况:
    1.{} 解析'大括号'类型 
    2. [ ] 解析是'中括号'类型 
    3. 1与2的组合方法即"{’name’:’李书豪’ ,’hobby’:['编程','电竞','睡觉']}"
    
    
    //大括号对象类型object
    jsonObj = {
      'name':'lishu',
      'age':24
    }
    
    //数组类型Array(数组)
    jsonArr = "['beijing','shanghai']"
    
    //组合形式
    jsonObj = {
      'name':'lishu',
      'age':24,
      'friend':{'name':'zuoshou','age':18}
    }
    
    JSON与Python默认类型转化:
    JSON     	Python
    object		dict
    array		list
    string		unicode
    number		int
    true		True
    flase		Flase
    

    6 json用法

    导入json  import json
    
    JSON函数
    json.dumps()   将 Python 对象编码成 JSON 字符串,类似编码
    json.loads()   将已编码的 JSON 字符串解码为 Python 对象,类似解码
    将Python的字典结构导出到json使用json.dumps() ,将json读成Python的字典结构,使用json.loads()
    
    json.dumps()   编码json数据,常见的属性列表
    json.dumps(obj,ensure_ascii=True,encoding='utf-8',indent=4, separators=(',', ': '))
    
    例:
    data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
    json = json.dumps(data)
    输出json格式字符串:[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]   #注意的单引号变成标准双引号
    
    #indent = 4 表示格式化数据
    json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
    输出标准Json格式字符串:
    {
        "a": "Runoob",
        "b": 7
    }
    
    json.loads()  解码json数据,常见属性列表
    例:
    jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    text = json.loads(jsonData)
    
    输出结果:{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
    
    json数据格式的总结:
      1. json序列化方法:
              dumps:无文件操作         dump:序列化+写入文件
    
      2. json反序列化方法:
              loads:无文件操作         load: 读文件+反序列化
    
      3. json模块序列化的数据 更通用
          picle模块序列化的数据 仅python可用,但功能强大,可以序列号函数
    
      4. json模块可以序列化和反序列化的 
      5. 格式化写入文件利用  indent = 4
  • 相关阅读:
    设计模式 --建造者模式
    HIVE
    Sqoop Mysql导入Hive完整命令参数解析
    Centos7 安装CDH6.3.2 集群
    sqlalchemy 批量插入
    前后端分离
    后台管理模板
    Springboot
    汇编基础
    百万点数据矢量切片实时聚合展示
  • 原文地址:https://www.cnblogs.com/why957/p/9068913.html
Copyright © 2011-2022 走看看