jQuery fileupload插件成功回调

时间:2012-11-26 03:43:40

标签: javascript jquery ruby-on-rails-3 html5

我使用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请求调用了“完成”回调函数。在发送所有请求后没有调用它。并为每个照片文件调用了创建操作。如何才能在客户端或服务器端上传所有文件后才能回调?

3 个答案:

答案 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"在上传所有文件时被触发。试试这个