jQuery fileupload插件成功回调

我使用jQuery文件上传插件(https://github.com/blueimp/jQuery-File-Upload)在rails中同时上传多张图片。 照片附加到项目模型,项目将添加到投票中。

使用插件:

$(document).ready(function(){ $('#fileupload').fileupload({ url: '/polls', dataType: "json", done: function(e,data){ window.location = "/polls/" + data.result.id; } } }); 

期望在每个照片文件的轮询控制器中调用创建操作,并重定向页面以在上载所有文件后显示创建的轮询。 但是,例如,当选择上传6个文件时,它首先仅在投票页面中显示4张照片。 刷新页面后,显示6张照片。 我猜这个问题是由回调函数引起的。 似乎在上传所有文件之前将其重定向到民意调查页面
完成了。 所有上传请求都应该成功发送,但这些项目并非全部创建(回形针可能需要几秒钟来处理图像)。

我有什么建议可以解决这个问题吗? 谢谢

编辑:检查实际上是否为每个成功的http请求调用了“完成”回调函数。 在发送所有请求后没有调用它。 并为每个照片文件调用了创建操作。 如何才能在客户端或服务器端上传所有文件后才能回调?

您可以尝试使用add callback来计算正在上载的文件,然后在每个done回调中减少该数量。 然后,如果该数字为0 ,您只会进行重定向。

像这样的东西:

 $(document).ready(function(){ var filesToProcess = 0; $('#fileupload').fileupload({ url: '/polls', dataType: "json", add: function(e, data){ filesToProcess++; }, done: function(e,data){ filesToProcess--; if (filesToProcess === 0){ window.location = "/polls/" + data.result.id; } } } }); 

完成的回调就像jQuery ajax()发送的成功回调一样,并不意味着文件上传已经完成。 尝试使用

 $('#fileupload').bind('fileuploaddone', function (e, data) {/* ... */}) 

我不确定上述内容是否有效但试一试。 如果不是这样,您总是可以在服务器端编写一个方法,以便在上传完成时向后报告。

在上传所有文件时会触发另一个回调"stop" 。 试试吧