Form表单 JSON Content-type解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 1 表单Form概述在Form表单中,参数一般有: action 表单提交的url method 提交方式:post get name 表单的属性名 encty...

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,用来告诉服务端消息主
数据。

form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,
默认为application/x-www-form-urlencoded

5 json概述

JSON:JAVAScript Object Notation是一种轻量级的数据交换格式
大致分为三种情况:
1.{} 解析'大括号'类型 
2. [ ] 解析是'中括号'类型 
3. 12的组合方法即"{’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 
相关文章
|
3月前
|
SQL 存储 JSON
SQL,解析 json
SQL,解析 json
81 8
|
2天前
|
JSON JavaScript 前端开发
一次采集JSON解析错误的修复
两段采集来的JSON格式数据存在格式问题,直接使用PHP的`json_decode`会报错。解决思路包括:1) 手动格式化并逐行排查错误;2) 使用PHP-V8JS扩展在JavaScript环境中解析。具体方案一是通过正则表达式和字符串替换修复格式,方案二是利用V8Js引擎执行JS代码并返回JSON字符串,最终实现正确解析。 简介: 两段采集的JSON数据因掺杂JavaScript代码导致PHP解析失败。解决方案包括手动格式化修复和使用PHP-V8JS扩展在JavaScript环境中解析,确保JSON数据能被正确处理。
|
4月前
|
JSON API 数据格式
requests库中json参数与data参数使用方法的深入解析
选择 `data`或 `json`取决于你的具体需求,以及服务器端期望接收的数据格式。
307 2
|
4月前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
156 9
|
3月前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
3月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
636 0
|
4月前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
219 0
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
86 2
|
8天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
8天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多