使用jquery.fileupload.rails,函数.fileupload()有时无法返回

时间:2013-03-08 19:34:08

标签: jquery ruby file-upload blueimp

问:为什么.fileupload()无法返回? (问题简而言之)

详细说明:

我使用blueimp的JQuery文件上传来成功拖放文件,然后由CarrierWave处理。大部分时间它都正确初始化。

我有一个嵌套标签界面(bootstrap),它根据您选择的标签接受不同的文件上传量到不同的目标。这也有效。大部分时间,一切都正确初始化,我很高兴。

但是,相当频繁的.fileupload()函数在客户端或服务器上没有任何显示的错误消息时不会返回(崩溃)。我想弄明白为什么。

(注意:这里的“历史”一词是指我的数据,而不是浏览器历史记录。)

显示的数据由ajax调用加载。 form_for<script>包含在partial:records / _fileupload.html.erb中(如下所示) 部分是由该ajax调用加载。

<div class="container span9">
  <%= form_for Record.new, :remote => true, :html => { :multipart => true, :id => "fileupload-history"  } do |f| %>
    ....
    <div class="row fileupload-buttonbar" id="fileupload-droptarget-history">
    ....
      <div class="progress progress-success progress-striped active fade">
        <div class="bar" style="width:0%;"></div>
      </div>
  ....

<!-- The loading indicator is shown during image processing -->
<div class="fileupload-loading"></div>

<!-- The table listing the files available for upload/download -->
<table class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table>

....
<!-- standard "template-upload" template from example code -->
<script id="template-upload-fileupload-history" type="text/x-tmpl">
....

<!-- Empty template to display files available for download (unused) -->
<script id="template-download-history" type="text/x-tmpl"></script>

继续在同一个文件中,注意页面加载完成后用于运行脚本的$(function ()...

<script type="text/javascript" charset="utf-8">
   $(function () {

此警报会触发......

   alert("fileupload history fileupload.html.erb - A");

   // Initialize the jQuery File Upload widget:
   $('#fileupload-history').fileupload({
     uploadTemplateId: "template-upload-fileupload-history",
     downloadTemplateId: "template-download-history",
     dropZone: $("#fileupload-droptarget-history")
   });

但是以下警告偶尔会触发,表明.fileupload()从未返回(崩溃)。

   alert("fileupload history fileupload.html.erb - B");

要完成我的示例,这里有一些有用的信息,适合那些正在查看此代码的人。第一个是在上传完成后刷新我显示的数据。

   $('#fileupload-history').bind('fileuploaddone', function (e, data) {
     fillHistoryAjaxHolder($("#currentAJAXHistoryUrl").html());
   });

...并且这个将拖放限制为仅指定的放置目标。

   // Disable drag-n-drop for the rest of the page
   $(document).bind('drop dragover', function (e) {
     e.preventDefault();
   });
 });
</script>

所以我的问题:

什么会导致.fileupload无法返回某些时间? (取决于我如何到达我的页面......或者之前加载的内容)

所以我想知道是否存在某种应该在此之前发生的初始化?

现在,使事情变得复杂:

我之前有过多个模板实例,甚至还有id="fileupload"复制到多个文件的实例。但是,我意识到我遇到了不同的目标问题,所以在这种情况下我将id="fileupload"更改为id="fileupload-history",在另一种情况下将id="fileupload-report"更改为,依此类推。我们的想法是将fileupload的每个实例拆分为自己独特的部分。

但是,当我删除旧的(重复的)代码时,.fileupload()失败开始更频繁地发生。 (现在它非常可靠地失败了)

所以(最后!)我向经验丰富的JQuery fileupload用户提问:

  • 对于多个上传目标,我应该使用不同的form_for id='tag'代码吗?

我问,因为以下示例对.fileupload()

的不同调用使用相同的元素

来自github的示例:"Multiple-File-Upload-Widgets-on-the-same-page"

$('.fileupload').each(function () {
    $(this).fileupload({
        dropZone: $(this)
    });
});
  • 那么,使用不同的$('.fileupload')元素是否存在问题?
  • 我是否应该寻找可能无法检查的错误消息?
    • 目前我在Google Chrome的开发人员工具中没有看到任何内容。
  • 有什么想法吗?

很长的帖子,对不起。

0 个答案:

没有答案