FormData不会在服务器中发送完整文件

时间:2015-07-27 12:40:57

标签: javascript jquery

所以我尝试使用jquery ajax将多个文件上传到我的服务器。

所以这就是我到目前为止所做的:

<input type="file" id="lab" name="lab[]" size="10" class="filestyle" multiple/>

这是我处理更改事件的javascript:

 function on_documents_changed(){
        $("#lab").change(function() {
            var formdata = new FormData();

            //formdata.append('case_id', $('#case-id').text());
            var inp = document.getElementById('lab').files;

            for (var i = 1; i <= inp.length; i++) {
                formdata.append('lab_' + i, inp.item(i));
                console.log('Appended ' + i);
            }

            Main.Mod.do_ajax('casereport/upload_documents/laboratory', 'POST', function(){}, formdata);
        });
    }

这是do_ajax;

的代码
function do_ajax(url,type,callback_function,formdata){
        var params = {
            type: type,
            url: Main.Vars.host + url,
            contentType: false,
            cache: false,   
            processData:false, 
            dataType: 'json',
            success: function(data){
                callback_function(data);
            }
        }
        if(formdata != null){
            params.data = formdata;
        }
        $.ajax(params);
    }

我的问题是,当我尝试上传时,可以说,4个文件。它只读取服务器中的3个文件。我注意到只有最后一个文件没有被读取或者甚至没有在$ _FILES中。

非常感谢您的回复!

1 个答案:

答案 0 :(得分:1)

更改你的for循环,因为inp是一个从索引0开始的数组,但是你正在访问它,所以第一个文件将会被删除: -

 function on_documents_changed(){
    $("#lab").change(function() {
        var formdata = new FormData();

        //formdata.append('case_id', $('#case-id').text());
        var inp = document.getElementById('lab').files;

        for (var i = 0; i <  inp.length; i++) {
            formdata.append('lab_' + i, inp.item(i));
            console.log('Appended ' + i);
        }

        Main.Mod.do_ajax('casereport/upload_documents/laboratory', 'POST', function(){}, formdata);
    });
}