2016-05-17 52 views
0

我有一個問題,將文件輸入對象傳遞給準備並添加到對象數組之前的函數,然後將它提供給表單數據數組。Javascript,文件輸入和FormData問題

爲了簡化這一點,我將其分解爲以下內容。

case "file": 
    values[input_name] = inputs[i].files[0]; 
break; 
return values; 

如果我文件讀入到一個對象數組

values{"imagename": file} 

傳遞一個對象入FORMDATA對象

formParams.append("imagename", file); 

對此我通過整個對象與下面的循環做之前

var formParams = new FormData(); 
for (key in values) { 
    formParams.append(key, values[key]); 
    log("error", "FormData Key: " + key + " Data:" + values[key]); 
} 

FormData對象似乎並不通過實際的文件,但它傳遞FileList數據的名稱,大小等

我的問題是,本身可以傳遞給一個對象,該文件保存在圓通,看起來我正在失去正在上傳的圖像的場景。

當表單在另一端由PHP處理時,它不會填充$_FILES數組,並且PHP進程函數失敗,因爲它看不到相應輸入字段的任何數據。

我將文件傳遞給FormData之前,通過傳遞文件來丟失文件數據?

+0

你在設置'contentType:'multipart/form-data''嗎? –

+0

是的,我傳遞一個新創建的窗體對象'var form = document.createElement('form');'給formData並設置'form.enctype ='multipart/form-data';'爲該窗體。 – PHPDev

回答

0

可以傳遞到FormData對象你要發送的表單元素:

form.addEventListener('submit', function(ev) { 

    var formParams = new FormData(form); 
    // here you can perform your ajax request 

    ev.preventDefault(); 
}, false); 

我不知道你需要的塊

for (key in values) { 
    formParams.append(key, values[key]); 
    log("error", "FormData Key: " + key + " Data:" + values[key]); 
} 

除非您要添加更多的關鍵/對價值,你應該能夠安全地將其刪除。

+0

表單已被提交,表單輸入,選擇,textareas等被整理到一個數組中,數組被操縱,添加了一些額外的鍵值,並且這是返回被處理的值{}對象由追加循環。 – PHPDev

+0

在FormData.append(「image」:file)之前,將文件image.files [0]傳遞給values {「image」:file} – PHPDev

+0

我應該添加這個窗體,它似乎並不存在完全沒有文件數據。 – PHPDev