文件上传后,只调用一次ajax

时间:2014-11-28 23:23:14

标签: javascript jquery ajax

我有一个jQuery File Upload ajax函数,如下所示:

   $('#uploadFile').fileupload({
        replaceFileInput: false,
        singleFileUploads: true,
        autoUpload: false,
        add: function (e, data) {
            $.each(data.files, function (index, file) {
                data.url = 'my_url';
                data.type = 'POST';
                data.submit();
            });
        },
        done: function (e, data) {
            alert("Done");
        }
    });

目前,如果我上传了3个文件,我就会收到3'完成'警报,因为为每个文件调用done函数。有没有办法可以改变这种行为,这样只要上传了多少文件就完成了一次完成功能 - 所以如果我上传了2个文件,我只想看看'完成'警告一次,如果我上传了10个文件,我仍然只想看到“完成”。警报一次。

4 个答案:

答案 0 :(得分:0)

请查看here

顺便说一句,您可以玩以下内容: 在服务器端,如果上传了所有文件,您可以发回特殊结果。例如,在完成后,您可以检查此值。

答案 1 :(得分:0)

你可以使用falg:

var IsDone=0;
$('#uploadFile').fileupload({
    replaceFileInput: false,
    singleFileUploads: true,
    autoUpload: false,
    add: function (e, data) {
        $.each(data.files, function (index, file) {
            data.url = 'my_url';
            data.type = 'POST';
            data.submit();
        });
    },
    done: function (e, data) {
     if(IsDone==0){
        alert("Done");
        IsDone=1;
     }
    }
});

答案 2 :(得分:0)

这部分对我有用:

var addedFiles = 0;
var uploadedFiles = 0;

$('#uploadFile').fileupload({
        replaceFileInput: false,
        singleFileUploads: true,
        autoUpload: false,
        add: function (e, data) {
            $.each(data.files, function (index, file) {
                data.url = 'my_url';
                data.type = 'POST';
                data.submit();
                addedFiles += 1;
            });
        },
        done: function (e, data) {
            uploadedFiles += 1;

            if (addedFiles === uploadedFiles) {
               alert("Done");
               addedFiles = 0;
               uploadedFiles = 0;
            }
        }
    });

答案 3 :(得分:0)

如果您愿意将singleFileUploads更改为false,那么您可以执行以下操作:

$('#uploadFile').fileupload({
    replaceFileInput: false,
    url: 'my_url',
    type: 'POST',
    done: function(e, data) {
        alert('Done');
    }
});

否则,我能想出的最好的黑客是:

$('#uploadFile').fileupload({
    replaceFileInput: false,
    url: 'my_url',
    type: 'POST',
    add: function(e, data) {
        var $this = $(this),
            jqXHRs = $(this).data('jqXHRs');

        // Check if 'add` was called for the first file.
        if (data.files[0] == data.originalFiles[0]) {
            jqXHRs = [];
            $this.data('jqXHRs', jqXHRs);
        }

        jqXHRs.push(data.submit());

        // Check if 'add` was called for the last file.
        if (data.files[0] == data.originalFiles[data.originalFiles.length-1]) {
            $.when.apply($, jqXHRs).done(function() {
                alert('done');
            });
            $this.removeData('jqXHRs', jqXHRs);
        }
    }
});

注意:

  • singleFileUploads选项默认为true
  • autoUpload选项默认为true
  • 当您添加自己的autoUpload功能时,我不认为add选项的价值很重要。
  • singleFileUploadstrue时,会为每个要添加的文件调用add函数。
  • ' data.oroginalFiles contains the original file list, in the order they will be passed to the add` function。