表單數據上傳
情況一:
一、當表單文件處於無任何處理狀態時,用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或更新版本