如何使用jquery为表单中的每个输入类型文件进行ajax调用

时间:2017-03-31 03:51:13

标签: javascript jquery ajax

我有一个简单的表单,其中一个输入用于单个文件,另一个输入用于多个文件,如何每次按文件和其他表单数据进行ajax调用循环文件?

<form id = "uploadForm" name = "uploadForm" enctype="multipart/form-data">
    <label for="uploadFile">Upload Your File</label>
    <input type="file" name="uploadFile" id="uploadFile">
    <input type="file" name="attachment" id="attachments" multiple />

    <input type="text" name="attachmentId" value="1236"> 
    <input type="text" name="attachmentName" > 
    <input type="text" name="JobId" value="xyz" >
    <input type="text" name="fileCategory" value="abc">   

现在我正在做整个ajax表单提交如下:

$('#'+formId).ajaxForm({
    url:FileUploadUrl,
    headers: { "X-Requested-With":"XMLHttpRequest" },
    contentType: 'application/json',
    dataType:'json',
    success : function(data){
},

但我想一次只为一个文件做这件事,请提前帮助谢谢。

1 个答案:

答案 0 :(得分:0)

不确定为每个$.ajax()对象调用File的目的是什么,尽管您可以使用$.when()Function.prototype.apply()$.map(),{{1} } .map() File属性input type="file" FileList处的每个.files请求

var n = 0;
var requests = $.when.apply($, $.map($("#uploadForm :file"), function(input) {
  return $.when.apply($, [].slice.call(input.files).map(function(file, index) { 
             return $.ajax({url, data:new FormData("file-" + n++, file)})
           })
         )
}))
.then(function(results) {
     console.log(results)
}, function handleErr(err) {
     console.log(err)
})