1

我使用 jQuery File Upload Plugin (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;
      }
    }
});

预计会在投票控制器中为每个照片文件调用创建操作,并在所有文件上传后重定向页面以显示创建的投票。However, for instance, when 6 files were chosen to upload, it only displayed 4 photos in the poll page at first. 刷新页面后,显示了6张照片。我猜这个问题是由回调函数引起的。似乎它在所有文件的上传完成之前重定向到投票页面
。所有的上传请求都应该发送成功,但项目并未全部创建(回形针处理图像可能需要几秒钟)。

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

编辑:检查“完成”回调函数实际上是为每个成功的 http 请求调用的。发送完所有请求后,它没有被调用。并且为每个照片文件调用了创建操作。我怎样才能拥有一个仅在所有文件上传后才回调的函数,无论是在客户端还是服务器端?

4

3 回答 3

3

您可以尝试使用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;
        }
      }
    }
});
于 2014-02-14T14:25:06.223 回答
2

done 回调的作用类似于 jQuery 发送的成功回调ajax(),并不意味着文件上传已经完成。尝试使用

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

我不确定上述是否可行,但请尝试一下。如果不是这样,您总是可以在服务器端编写一个方法,以便在上传完成时进行报告。

于 2012-11-26T04:22:10.880 回答
-1

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

于 2014-11-03T17:16:11.103 回答