我使用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请求调用了“完成”回调函数。在发送所有请求后没有调用它。并为每个照片文件调用了创建操作。如何才能在客户端或服务器端上传所有文件后才能回调?
答案 0 :(得分:2)
完成的回调就像jQuery ajax()
发送的成功回调一样,并不意味着文件上传已经完成。尝试使用
$('#fileupload').bind('fileuploaddone', function (e, data) {/* ... */})
我不确定上述内容是否有效但试一试。如果不是这样,你总是可以在服务器端编写一个方法,以便在上传完成时报告。
答案 1 :(得分:2)
您可以尝试使用add
回调来计算正在上传的文件,然后在每个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;
}
}
}
});
答案 2 :(得分:-1)
还有另一个回调"stop"
在上传所有文件时被触发。试试这个