jquery在文件上传后每个停止按数组检查所有文件上传

时间:2014-05-21 05:16:41

标签: javascript jquery ajax file-upload

我想应用ajax上传图片并为其命名:

上传图片功能的js部分是:

function sendFile(file) {
$.ajax({
    type: 'post',
    url: '@routes.CommonController.uploadhandler("")' + file.name,
    data: file,
    success: function () {
        return true;
        },
    error: function(){
        return false;
        },
    xhr: function(){
        // get the native XmlHttpRequest object
        var xhr = $.ajaxSettings.xhr() ;
        // set the onprogress event handler
        xhr.upload.onprogress = function(evt){ console.log('progress', evt.loaded/evt.total*100) } ;
        // set the onload event handler
        xhr.upload.onload = function(){ console.log('DONE!') } ;
        // return the customized object
        return xhr ;
        },
    processData: false,
    contentType: file.type
    });
}

文件列表是FileList Object。它应该是:FileList {0:File,1:File,length:2,item:function}

上传每个图片功能的管理是:

$("#px-submit").click(function(event){
    var arrayfiles=[];
    var filelist=$("#filename").prop("files");
    for (var i = 0; i < filelist.length; i++) {
        arrayfiles[i] = filelist[i];
    }
    console.log("arrayfiles:", arrayfiles);
var allsuccess=arrayfiles.every(function(element, index, array) {
    console.log("sending:", element.name);
    var r=sendFile(element);
    return r;
    });
if(allsuccess){
    $("form" ).reset;
    alert("All your pictures are already uploaded!");
}else{
    $("form" ).reset;
    alert("Some error during uploading pictures, you should upload the picture again");
}

我将fileList更改为Array,然后使用Array.every尝试确认每个文件已经上传。但它总是在文件上传时停止。为什么会这样?以及如何更改它以确认已上传的2个或更多文件?

1 个答案:

答案 0 :(得分:0)

要考虑的一些事情:

var filelist=$("#filename").prop("files");

filelist变量应该表示什么,$("#filename").prop("files")返回什么?我会假设它返回一个字符串,在这种情况下你会重复一个字符串。

你的for循环看起来有点奇怪,它没有终止条件:

for (var i = 0; f = filelist[i]; i++) {
   arrayfiles[i]=f;
}

我可能会考虑将for循环重写为以下内容(假设filelist是一个数组):

for (var i = 0; i < filelist.length; i++) {
   arrayfiles[i] = filelist[i];
}