【问题标题】:jQuery fileupload plugin success call backjQuery fileupload 插件成功回调
【发布时间】:2012-11-26 03:43:39
【问题描述】:

我使用 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 请求实际上是否调用了“完成”回调函数。发送完所有请求后,它没有被调用。并且为每个照片文件调用了创建操作。我怎样才能拥有一个仅在所有文件上传后才回调的函数,无论是在客户端还是服务器端?

【问题讨论】:

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


    【解决方案1】:

    您可以尝试使用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】:

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

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

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

      【讨论】:

      • 试过了。这次选择了 6 个文件时只上传了 4 个文件。刷新 poll 页面后,还是 4 个。而且服务器告诉只发送了 4 个请求。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-05
        • 2023-03-03
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多