我在我的项目中使用了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;
可能是这样的?
编辑:
答案 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类