FormData序列化及file文件上传
表单数据上传
情况一:
一、当表单文件处于无任何处理状态时,用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文件上传的更多相关文章
- js 实现 input type="file" 文件上传示例代码
在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...
- [置顶] js 实现 <input type="file" /> 文件上传
在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但是它长得又丑.浏览的字样不能换,我们一般会用让,<input type ...
- js 实现 input file 文件上传
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- 更改file文件上传默认CSS样式
前言: 多数时候我们需要表单上传文件,如图片.但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. & ...
- input file 文件上传标签的样式美化
input file 文件上传标签的样式美化 将<input type="file">的透明度设置为0: <input type="file" ...
- Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)
一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...
- FormData+Ajax 实现多文件上传 学习使用FormData对象
FormData对象是为序列化表以及创建与表单格式相同的数据(当然是用于XHR传输)提供便利. 今天我们使用dropzone和FormData实现多文件上传功能. var SAMP = null; / ...
- PHP 多input file文件上传
前台html jquery代码 后台PHP处理 前台html <form id="form" method="post" enctype="mu ...
- 使用PHP和HTML5 FormData实现无刷新文件上传教程
无刷新文件上传是一个常见而又有点复杂的问题,常见的解决方案是构造 iframe 方式实现. 在 HTML5 中提供了一个 FormData 对象 API,通过 FormData 可以方便地构造一个表单 ...
随机推荐
- 第88讲:Scala中使用For表达式实现map、flatMap、filter
今天我们来学习一下如何使用for表达式实现map.flatMap以及filter 首先,我们来看下map.map的功能是,传入一个list,通过一个函数f,将list中的元素A变成元素B的过程.最后得 ...
- bootstrap3相关文档
,每列分配多列 <divclass="container"> <div class="row"> <div class=" ...
- HTML 基础 块级元素与行内元素
块元素:单独占一行,宽度占整行,可以包含内联元素和其他块元素,通过样式display:inline,变为行内元素,不换行 内联元素:不单独占一行,宽度根据内容来决定,只能容纳文本或者其他内联元素 ,可 ...
- TTL与CMOS门电路
个人观点总结 对TTL和CMOS门电路的认识: 1.构成 TTL集成电路一般都是有三极管(或二极管)和电阻.电容构成,其中三极管(二极管)是作为主要的开关器件 CMOS集成电路一般是由场效应管和电阻. ...
- unigui web app之菜单
unigui web app之菜单 拖放TUnimMenu控件到窗体上. side:=msleft 表示将在左边显示菜单. 菜单项属性 UnimMenu1.Visible := True;显示菜单 U ...
- Windows10卡顿,磁盘 内存占用100%或比较多
1.关闭服务:Superfetch: 2.结束antimalware service executable进程,gpedit.msc下依次点击“计算机配置/管理模板/Windows组件/Windows ...
- 【CF600E】 Lomsat gelral
CF600E Lomsat gelral Solution 考虑一下子树的问题,我们可以把一棵树的dfn序搞出来,那么子树就是序列上的一段连续的区间. 然后就可以莫队飞速求解了. 但是这题还有\(\T ...
- nginx-2.nginx是什么
Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器: Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以 ...
- [翻译]Elasticsearch重要文章之四:监控每个节点(jvm部分)
http://zhaoyanblog.com/archives/753.html 操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细.他们列出了基本的资源统计,例如CPU和负 ...
- 利用adb 打开手机应用程序
通过adb打开android应用,我们需要做的第一步,就是查看当前app的入口,第二部,就是通过命令启动我们的app入口 查看app的启动画面 在运行下面命令时,先启动想要通过adb打开的app #查 ...