FF4中增加了一個很有意思的對象,FormData。通常我們提交(使用submit button)時,會把form中的所有表格元素的name與value組成一個queryString,提交到后台。這用jQuery的方法來說,就是 serialize。但當我們使用Ajax提交時,這過程就要變成人工的了。因此,FormData對象的出現可以減少我們一些工作量。W3c草案提供了三種方案來獲取或修改FormData。
1:創建一個空的FormData對象,然后再用append方法逐個添加鍵值對:
var data = new FormData(); data.append('uploadpic', $('#licensefile')[0].files[0]);//可以是文件 data.append('type',"license");
2:取得form元素對象,將它作為參數傳入FormData對象中:
var form = document.getElementById("form"); var data= new FormData(form);
3 : 利用form元素對象的getFormData方法生成它:
var form = document.getElementById("form"); var data= form.getFormData()
formdata是一個不透明的對象,現在暫時只有一個append可以操作,不能通過序列化手段得到其里面的內容。
最終可以將 data = new FormData()獲取到的數據丟到ajax的data里面,作為數據傳給后台;以下是我用FormData對象上傳圖片的例子:
html file域:
<input type="file" id="licensefile" multiple="multiple">
jquery ajax結合FormData異步上傳圖片:
$("#licensefile").change(function(){ popLayer.loading(); var data = new FormData(); data.append('uploadpic', $('#licensefile')[0].files[0]); data.append('type',"license"); $.ajax({ type: "post", url: "fileupload/uploadify!userUploadPhoto.action", processData: false, contentType: false, data: data, success: function(data){ var _data = data if (data.errorCode=="000000") { vm.licenseUrl = data.halfImgUrl; storage.set("licenseUrl",data.halfImgUrl); popLayer.destroy(); }; } }); });
關於FormData更多的屬性和查閱:https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
參考其他人經驗以及部分個人總結,如有侵權,請及時聯系本人,QQ:435641688,謝謝