问:为什么.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')
元素是否存在问题?很长的帖子,对不起。