JQuery文件上传:在data.submit()上发送两个请求

JQuery File Upload: sending two request on data.submit()

本文关键字:请求 两个 submit 文件 data JQuery      更新时间:2023-09-26

我正在尝试在我的应用程序中使用回形针jquery-fileupload-rails上传视频

我用曲别针和jquery跟随上传文件上传视频,但是在上传视频的时候,我选择了视频,没有等待提交按钮,所以我跟随了1: jQuery文件上传:是否可以通过提交按钮来触发上传?选择一个视频并在提交按钮上上传,而不是选择文件。

但是有一个问题是我是否把提交按钮放在表单或外部表单。

当我在表单中放置提交按钮时,它会发送两个请求来按提交按钮,一个带视频,另一个不带视频。

如果我把按钮放在表单外,它会在按提交按钮时发送一个请求,但在成功创建/更新后,它仍然在同一个页面上。

所有我想要的是按下提交,只发送一个请求和重定向到索引页成功创建/更新。

在_form.slim

= simple_form_for [:admin,add] do |f|
   .wizard-content
     .row
       .col-sm-6
          = f.input :video, multiple: false, wrapper: :horizontal_file_input
          button#submit_button.btn.btn-primary
            | Save
在adds.coffee

 jQuery ->
      $('#add_video').attr('name','add[video]')
      $('#add_video').fileupload
         $('#submit_button').off('click').on 'click', ->
           data.submit()

在控制器中我有

def create
     if add.save
       redirect_to admin_adds_path
       flash[:success]= "Add Created"
     else
       render :new
     end
   end
   def update
     if add.update(add_params)
       redirect_to admin_adds_path
       flash[:success]= "Add Updated"
     else
       render :edit
     end
   end

还有一个_add.slim

= image_tag(@add.uploaded_file(:small), class: 'thumb')

我还按照建议的教程创建了create.js.erb和edit.js.erb(尽管我不了解它的用法)

- if @add.new_record?
  |  alert('Failed');
- else
  |  if ($('h1') !== undefined) { $('h1').append("
  =j render partial: 'adds/add', locals: { add: @add }
  | "); }

这有什么问题?

尝试表单内的按钮并使用event.preventDefault(),因为似乎表单正在执行默认操作,即发送数据并重新加载页面,并调用js.

$('#submit_button').off('click').on 'click', (event) ->
  event.preventDefault()
  data.submit()

当您将按钮放在表单外时,您可以处理done事件和重定向。记住这个POST是ajax的,如果你POST一个更改或新元素,你会通过ajax得到响应,而不是通过web浏览器页面。

一些像

$('#fileupload').fileupload({
    dataType: 'json',
    add: function (e, data) {            
        $("#up_btn").off('click').on('click', function () {
            data.submit();
        });
        done: function (e, data) {
           window.location.href = "data.next_url"; 
        }
    },
});

也许你需要响应一些json(而不是重定向redirect_to admin_adds_path)从控制器传递到javascript信息(一些像success, error, next_url, others)