表单数据上传

情况一:

  一、当表单文件处于无任何处理状态时,用submit提交直接上传; 但这种方式上传,数据无任何处理;(极少使用);

  但是传统的表单提交会导致页面刷新,但是有些情况下,我们并不希望页面被刷新,这种时候,我们都是使用ajax的方法进行请求的

情况二:

  二、当表单文件使用$.ajax上传,表单中无file文件上传时,数据要进行序列化处理,要将表单中的数据转为json数据格式

  1、序列化serialize()方法 重点内容

  格式:var data=$("#formid").serialize();,其中formid为表单id

  功能:将表单内容序列化成一个json结构的对象,注意不是json字符串。

  比如,[{"name":"lihui", "age":"20"},{...}] 获取数据为 jsonData[0].name

  这样在ajax提交表单数据的时候,就不用一一列举出每一个参数。主需要将data参数设置为 $("#formid").serialize() 即可。

  例子

<form id="submit_form">
  <input type="text" name="text" value="姓名"/>
  <pre name="code" class="html">
  <input type="url" name="url" value="网址"/>
<input type="email" name="email" value="电子邮件"/>
  <input type="button" value="submit"id="submit" />
</form> //提交方法
var formData=$("#submit_form").serialize();
$.ajax({
type : 'POST',
url : url地址,
data : formData,或者data:{$("#submit_form").serialize()},或者单个的参数data:{name:'value'}
async : false,
cache : false,
contentType : false,
processData : false,
success : function(data) {
//关闭弹框
alert("成功");
},
error : function(data) {
alert("error!");
}
});
//序列化表单对象

  注意:通过$("#submit_form").serialize();可以对表单进行序列化,从而将form表单中的所有参数传递到服务端。但是上述方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的。

情况三 

  二、当表单文件使用$.ajax上传,表单中有file文件上传时,表单序列化将无法传递文件流。不过如今主流浏览器都开始支持一个叫做FormData的对象,有了这个FormData,我们就可以轻松地使用ajax进行文件上传了。

  1、FormData方法介绍

  XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个”表单”.比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件。

  所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。

  参见:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/FormData

  先要将表单序列化 定义一个变量存储并处理表单

  例子:

<form enctype="multipart/form-data" method="post" id="表单ID">
var formdata=new FormData($("#表单ID")[0]);
$.ajax({
url : url,
type : 'POST',
data : formData,
async : false,
cache : false,
contentType : false,
processData : false,
success : function(data) {
 //上传成功
  alert("成功");
},
error : function(data) {
  alert("添加失败!");
}
});
//序列化表单对象

  参见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects

  使用FormData,进行Ajax请求并上传文件

  这里使用JQuery,但是老版本的JQuery比如1.2是不支持的,最好使用2.0或更新版本

  

FormData序列化及file文件上传的更多相关文章

  1. js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...

  2. [置顶] js 实现 <input type="file" /> 文件上传

    在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但是它长得又丑.浏览的字样不能换,我们一般会用让,<input type ...

  3. js 实现 input file 文件上传

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  4. 更改file文件上传默认CSS样式

    前言: 多数时候我们需要表单上传文件,如图片.但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. & ...

  5. input file 文件上传标签的样式美化

    input file 文件上传标签的样式美化 将<input type="file">的透明度设置为0: <input type="file" ...

  6. Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)

    一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

  7. FormData+Ajax 实现多文件上传 学习使用FormData对象

    FormData对象是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 今天我们使用dropzone和FormData实现多文件上传功能. var SAMP = null; / ...

  8. PHP 多input file文件上传

    前台html jquery代码 后台PHP处理 前台html <form id="form" method="post" enctype="mu ...

  9. 使用PHP和HTML5 FormData实现无刷新文件上传教程

    无刷新文件上传是一个常见而又有点复杂的问题,常见的解决方案是构造 iframe 方式实现. 在 HTML5 中提供了一个 FormData 对象 API,通过 FormData 可以方便地构造一个表单 ...

随机推荐

  1. iOS中的序列帧动画

    UIImageView对象的有一个animationImages属性,将图片数组赋值给该属性即可.如图: 控制动画的播放方法是:[ ___  startAnimating]; 控制动画的停止方法是:[ ...

  2. Codeforces Round #265 (Div. 2) E. Substitutes in Number

    http://codeforces.com/contest/465/problem/E 给定一个字符串,以及n个变换操作,将一个数字变成一个字符串,可能为空串,然后最后将字符串当成一个数,取模1e9+ ...

  3. Delphi中Unicode转中文

    function UnicodeToChinese(inputstr: string): string; var i: Integer; index: Integer; temp, top, last ...

  4. Xcode一些好用的插件,以及这些插件的管理器

    最近从xcode6.4升级到xcode7,发现以前所有的插件都失效了,如果要安装,需要重新去一个个下载.安装,很麻烦. 于是,转来了这篇博文,亲自测试,发现很好用...... 地址:http://11 ...

  5. xampp 80端口被占用后这么办??解决了

    modify port XAMPP: Another web server daemon is already running. 看不懂翻译一下 1. Open the file /opt/lampp ...

  6. SQL SERVER的锁机制(一)——概述(锁的种类与范围)

    锁定:通俗的讲就是加锁.锁定是 Microsoft SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制. 定义:当有事务操作时,数据库引擎会要求不同类型的锁定,如相关数 ...

  7. wpf根据X与Y轴获取内部值

    效果图: 环境 Visual Studio ,.Net Framework 4.0 SDK 支持Windows XP,Windows Win7.. 实现方法: 创建ListBox设置ListBox.I ...

  8. Spring IOC 容器源码分析 - 获取单例 bean

    1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...

  9. 微服务统一登陆认证怎么做?JWT ?

    无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...

  10. Dapper实现一对多对象关系聚合导航属性

    领域对象:Game(游戏), Room(游戏群),两者一对多的关系,SQL语句中会用到JOIN public class Game : AggregateRoot { public string Ta ...