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

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM