當創建一個內容較多的表單,表單里面又有了文件上傳,文件上傳也需要表單提交,單一的上傳文件很好操作;
<form action="接口" enctype="multipart/form-data" method="post"> <input type="file" name="uploadFile"/> <input type="submit" value="提交"/> </form>
但是,正常提交數據和上傳文件不是一個接口,后台接收參數的方式也是不一樣的;這就需要兩個form表單,但是form表單是不能嵌套的;還有就是表單的內容是按照順序排列的,穿件兩個獨立的表單,寫樣式會很麻煩;
因此需要一個動態創建form表的js代碼
這個方法只支持到IE10,IE10以下不支持new FormData();
//獲取文件
function addFile() {
document.getElementById('test1').value = "";
var file = document.querySelector('input[type=file]').files[0];//IE10以下不支持
var typeStr="image/jpg,image/png,image/gif,image/jpeg";
if(typeStr.indexOf(file.type)>=0){
document.getElementById('test1').value = file.name;
if (file.size > 2097152) {
alert("上傳的文件不能大於2M");
return;
}else{
upload(path,file)
}
}else{
alert("請上傳格式為jpg、png、gif、jpeg的圖片");
}
//上傳文件
function upload(path,theFormFile) { var fd = new FormData(); fd.append('file1', theFormFile);//上傳的文件: 鍵名,鍵值 var url = path;//接口 url = url ? url : ''; var XHR = null; if (window.XMLHttpRequest) { // 非IE內核 XHR = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE內核,這里早期IE版本不同,具體可以查下 XHR = new ActiveXObject("Microsoft.XMLHTTP"); } else { XHR = null; } if (XHR) { XHR.open("POST", url); XHR.onreadystatechange = function() { if (XHR.readyState == 4 && XHR.status == 200) { var resultValue = XHR.responseText; var data = JSON.parse(resultValue); XHR = null; } } XHR.send(fd); } };