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或更新版本

  

猜你喜欢

转载自www.cnblogs.com/javahr/p/9248386.html