【问题标题】:Rails 4 - submitting an ajax form but page is being redirectedRails 4 - 提交一个ajax表单但页面被重定向
【发布时间】:2026-01-16 07:30:01
【问题描述】:

我有一个使用 :remote => true 通过 ajax 提交的 Rails 4 表单。响应是 JSON。我被重定向到带有 JSON 的新页面,而不是留在当前页面上。为什么会这样?

形式:

<%= form_tag(
    {:controller => :uploads, :action => :create}, 
    :remote => true,
    :authenticity_token => true,
    multipart: true, 
    class: "hidden",
    id: "uploadDataForm") do %>
  <%= file_field_tag :file, class: "btn btn-primary btn-lg", style: "width: 100%;" %>
  <%= submit_tag "Upload CSV", class: "btn btn-success btn-lg disabled" %>
<% end %>

控制器:

class UploadsController < ApplicationController
  def create
    @test = "hello"
    render json: @test
  end
end

【问题讨论】:

    标签: ruby-on-rails ajax ruby-on-rails-4


    【解决方案1】:

    不能通过 AJAX 直接上传文件

    5.2 处理 Ajax 与其他表单不同,制作异步文件上传表单不像为 form_for 提供 remote: true 那样简单。对于 Ajax 表单,序列化是由在浏览器中运行的 JavaScript 完成的,由于 JavaScript 无法从您的硬盘读取文件,因此无法上传文件。最常见的解决方法是使用不可见的 iframe 作为表单提交的目标。

    http://guides.rubyonrails.org/form_helpers.html#uploading-files

    编辑:

    您可能想看看: https://github.com/JangoSteve/remotipart 看: form_tag with remote: true does not make an ajax request

    【讨论】:

    • 非常感谢 sytycs - 使用那个 gem 修复了它 :)
    • Np @DonnyP 很高兴我能帮上忙