檔案上傳的同時傳遞其他引數
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();
};
}
});
});