1

我将 gem 'jquery-fileupload-rails' 和 'carrierwave_backgrounder' gem 与 sidekiq 一起使用。下载完成后如何添加重新加载页面?

问题是下载后台并且页面立即重新加载,而不是在加载图像时

文件上传.js

  $(function () {
      $('#new_photo').fileupload({
          acceptFileTypes: '/(\.|\/)(gif|jpe?g|png)$/i',
          dataType: 'html',
          add: function (e, data) {
              data.context = $('#loading').css({display:"block"}).appendTo('#photos');
              data.submit();
          },
          done: function (e, data) {
              data.context.text('Upload finished.');
              location.reload();
          }
      });
  });

image_upload.html.erb

  <div class="upload" id="new_photo">
    <%= form_for([@project, current_user.photos.new]) do |f| %>
      <%= file_field_tag :image, multiple: true, name: "photo[image]" %>
      <%= link_to 'Save', @project, :class => 'btn btn-success' %>
    <% end %>
    <div id="loading">
      <h4>Loading</h4>
    </div>
  </div>
  <div class="image-upload">
    <% @project.photos.each do |photo| %>
      <%= image_tag photo.image_url.to_s %>
      <p><%= link_to "Delete", project_photo_path(@project, photo), :method => :delete, :class => 'btn' %></p>
    <% end %>
  </div>
4

3 回答 3

0

jquery fileuploader documentation on callbacks,您可以绑定success将在上传完成后触发的事件。

jqXHR = data.submit()
  .success(function() { window.location.reload() })
于 2013-08-26T06:43:55.267 回答
0

我认为您可以尝试在您的 javascript 函数中使用 Ajax。下载完成后,触发对控制器/方法的 ajax 调用,您的方法将自动将页面重新呈现回视图。您回调控制器的原因可能会帮助您将所有即时变量添加到您的视图中。

$.ajax({
 url: 'controller/method',
 type: 'post',
 data: 'YOUR DATA or Nothing',
 success: function(data) {}   
});

如果您不需要成功功能,那么您只需使用 url 并发布。尝试一些,您将能够弄清楚。

于 2013-08-26T06:19:10.067 回答
0

只需删除location.reloadfromDone部分并检查图像是否加载$("#image")然后点击window.location.reload

于 2013-08-26T06:04:56.927 回答