在Dropzonejs中调用.processQueue()时出错

时间:2016-04-04 19:05:45

标签: javascript file-upload dropzone.js

我在我的项目中使用了dropzoneJS。在addedfile事件中我添加了:

    var csrf = $('input[name=_token]').val();
    $.ajax({
        async: true,                      
        method: 'POST',
        dataType: 'json',
        url: '../public/userfiles',
        data: {"_token": csrf  },
        complete: function(data) {
            var maxsize = 314572800;
            var freesize = maxsize - data.responseJSON;
            if(file.size > freesize){
                alert('Нямата достатъчно свободно пространсво.');
            }
            else {
                alert('Успешно качен файл');
                return Dropzone.prototype.processQueue();         
            }
        }
    });

这实际上得到了所有上传文件的总计大小,并检查当前上传的文件是否大于“空闲空间”。为了进行检查,我设置了false的autoProcessQueue选项。检查大小后,我调用应该继续队列的函数。但是最后一行return Dropzone.prototype.processQueue();在控制台中给出了一个错误

TypeError: this.options is undefined parallelUploads = this.options.parallelUploads; 可能是这样的? 编辑: enter image description here

2 个答案:

答案 0 :(得分:1)

processQueue仅在Dropzone的实例上调用时才有效。否则,该函数无法知道要处理的队列。扩展example from the docs

var myDropzone = new Dropzone("div#myId", { url: "/file/post"});
myDropzone.on("addedfile", function(file) {
  // Your code here
  this.processQueue();
});

但是,由于您是从另一个函数(您的complete函数)内部执行此操作,因此您必须确保拥有正确的上下文。

myDropzone.on('addedfile', function(file) {
  $.ajax({
    // options go here
    complete: function(data) {
      var maxsize = 314572800;
      var freesize = maxsize - data.responseJSON;
      if(file.size > freesize){
        alert('Нямата достатъчно свободно пространсво.');
      }
      else {
        alert('Успешно качен файл');
        return myDropzone.processQueue();         
      }
    }
  });
});

修改

如果您正在自动初始化Dropzone,则可以使用init option.

对其进行配置
Dropzone.options.dropzoneFileUpload = {
  init: function() {
    // `this` refers to the current dropzone
    var self = this; // keep a reference
    this.on('addedfile', function(file) {
      ...
      $.ajax({
        ...
        complete: function(data) {
          var maxsize = 314572800;
          var freesize = maxsize - data.responseJSON;
          if(file.size > freesize){
            alert('Нямата достатъчно свободно пространсво.');
          }
          else {
            alert('Успешно качен файл');
            return self.processQueue();         
          }
        }
      });
    });
  }
};

答案 1 :(得分:0)

您需要从Dropzone实例中调用processQueue var myDropzone = new Dropzone("#my-dropzone");

var myDropzone = new Dropzone("#my-dropzone");
var csrf = $('input[name=_token]').val();
$.ajax({
    async: true,                      
    method: 'POST',
    dataType: 'json',
    url: '../public/userfiles',
    data: {"_token": csrf  },
    complete: function(data) {
        var maxsize = 314572800;
        var freesize = maxsize - data.responseJSON;
        if(file.size > freesize){
            alert('Нямата достатъчно свободно пространсво.');
        }
        else {
            alert('Успешно качен файл');
            return myDropzone.processQueue();         
        }
    }
});

而不是来自全球Dropzone类

请参阅:http://www.dropzonejs.com/#config-autoProcessQueue