jQuery FileUpload不会触发’done’
我使用jQuery-File-Upload插件。 我写了一个简单的代码来测试它 – 它可以工作,但并非没有问题。 即使文件已上传且进度条已到达结束,它也不会触发done
。
这是代码:
$('#file_file').fileupload({ dataType: 'json', autoUpload: true, add: function (e, data) { data.context = $('').text('Uploading...').appendTo(document.body); data.submit(); }, progressall: function (e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); $('#progress .bar').css( 'width', progress + '%' ); }, done: function (e, data) { alert('Done'); } });
我的输入很简单:
如果您的服务器没有返回JSON,请尝试删除:
dataType: 'json'
否则,您可能会遇到一个容易测试的失败事件:
fail: function(e, data) { alert('Fail!'); }
我换了几件事就行了。 这里:
$('#file_file').fileupload({ autoUpload: true, add: function (e, data) { $('body').append('Uploading...
') data.submit(); }, progressall: function (e, data) { var progress = parseInt(data.loaded / data.total * 100, 10); $('#progress .bar').css( 'width', progress + '%' ); }, done: function (e, data) { $('.upl').remove(); $.each(data.files, function (index, file) { /**/ }); } });
我使用autoUpload修复:true ,看起来当未设置autoUpload属性时(即使上传按预期工作),也不会触发done事件。
尝试使用文档中描述的回调选项 :
$('#fileupload').bind('fileuploaddone', function (e, data) { alert('Done'); });
这对我有用。
今天实验! 如果您使用的是PHP,请确保您的uploadhanler
PHP文件不显示错误或警告。 它会创建一个错误的JSON输出,当您上传文件时,插件无法使用done事件发送正确的JSON缓冲区。
对于PHP文件的错误跟踪,最好在这些脚本上编写日志文件而不是显示错误。 您可以使用:
error_reporting(0)
但是不要忘记在日志文件中添加错误跟踪。 当然 !
我正在使用multer,multer-azure-storage和blueimp-file-upload。 全部来自unpkg.com。 下面是带有完成触发器的多文件上传。 截至10/22/17工作。
js文件:
页面HTML,从快递服务:
$('#fileupload').fileupload({ url: 'https://domainwhatevs/my-listings/edit/[property id]/gallery', paramName: '_file', dataType: 'json', type: 'POST', autoUpload: true, add: function (e, data) { console.log('uploading:', data) data.submit(); }, done: function (e, data) { console.log('done triggered'); console.log(data._response.result.result[0].originalname, 'uploaded at', data._response.result.result[0].url); $.each(data.files, function (index, file) { // console.log(file.name, 'uploaded.') // console.log('done'); // console.log(index); // console.log(file); }); console.log(data); } });
// GET / my-listings / edit / [property id] / gallery
app.get( [ '/my-listings/edit/:_id/gallery' ], (req, res) => { console.log('image gallery:', req.params._id); res.render('my-listings--edit--gallery', { _id: req.params._id, session: req.session }); } );
// POST / my-listings / edit / [property id] / gallery
app.post( [ '/my-listings/edit/:_id/gallery' ], upload.array('_file'), (req, res, next) => { console.log(req.files); res.setHeader('Content-Type', 'application/json'); res.send({result: req.files}); next(); } );
$(input).fileupload( url : '...' ,dataType : 'json' ,sequentialUploads : true ,add : function (e,data) { $.each(data.files,function(i,file){ file.jqXHR = data.submit() .success(function (result, textStatus, jqXHR) {/* ... */}) .error(function (jqXHR, textStatus, errorThrown) { }) .complete(function (result, textStatus, jqXHR) { //... }); }); } ,done: function (e, data) { console.log(data); } });
适合我;
差异是
-
url设置(我希望你忘了把它放在你的片段中);
-
我将文件添加到下载队列的方式
-
顺序上传(?)
编辑:
jQuery文件上传插件使用jQuery.ajax()来处理文件上传请求。 由于Iframe传输插件,即使对于不支持XHR的浏览器也是如此。
为文件上载插件设置的选项将传递给jQuery.ajax(),并允许定义任何ajax设置或回调。 ajax选项processData,contentType和cache设置为false,以使文件上载起作用,不应更改。
https://github.com/blueimp/jQuery-File-Upload/wiki/Options
您可以在代码中的某处更改这些ajax设置; 无论如何,如果你的设置正确,因为它正在使用$ .ajax,所以不能触发完成