【问题标题】:Rails 3.2 remote form responds to HTML instead of JSRails 3.2 远程表单响应 HTML 而不是 JS
【发布时间】:2013-10-17 17:59:01
【问题描述】:

我可能遗漏了一些东西,这是我的问题。

我有一个表单来提交图像,我希望表单使用 AJAX,但在提交时它响应 HTML 格式而不是 JS。为什么POST请求不使用JS格式?? 我也使用carrierwave上传文件。

在我的控制器mission_slides_controller.rb

def new
  @account = Account.find(params[:account_id])
  @mission = Mission.find(params[:mission_id])
  @mission_slides = MissionSlide.where('mission_id = ?', @mission.id)
  slides = MissionSlide.where('mission_id = ?', @mission.id)
  @mission_slide = MissionSlide.new
  if slides.size < 1
    @mission_slide.position = 1
  else
    @mission_slide.position = slides.last.position+1
  end
  respond_to do |format|
    format.html # new.html.erb
    format.js
    format.json { render json: @mission_slide }
  end
end

def create
  @mission_slide = MissionSlide.new(params[:mission_slide])
  @account = Account.find(params[:account_id])
  @mission = Mission.find(params[:mission_id])
  respond_to do |format|
    if @mission_slide.save
      format.html { redirect_to user_account_path(current_user, @account), notice: 'Mission slide was successfully created.' }
      format.json { render json: @mission_slide, status: :created, location: @mission_slide }
      format.js
    else
      format.html { render action: "new" }
      format.json { render json: @mission_slide.errors, status: :unprocessable_entity }
      format.js
    end
  end
end

在我的控制器_form.html.erb

<div class="slides">
    <h4>Current slides</h4>
    <%= render 'mission_slides' %>
</div>
<%= form_for([current_user, @account, @mission, @mission_slide], :remote => true, :multipart => true) do |f| %>
    <%= render :partial => "layouts/form_messages", :locals => {:model_name => @mission_slide, :heading => t('errors.template.header', :count => @mission_slide.errors.size, :model => @mission_slide.class) } %>
    <%= f.hidden_field :mission_id, :value => @mission.id %>
    <div class="form-group required mission_slide_name">
        <div>
            <%= f.label :name, :class => "control-label required-label" %>
            <div>
                <%= f.text_field :name, :class => "form-control", :placeholder => "Slide Name" %>
            </div>
        </div>
    </div>
    <div class="form-group required mission_slide_image">
        <div>
            <%= f.label :image, :class => "control-label required-label" %>
            <div>
                <%= f.file_field :image, :class => "form-control" %>
            </div>
        </div>
    </div>
    <div class="form-group required mission_slide_position">
        <div>
            <%= f.label :position, :class => "control-label required-label" %>
            <div>
                <%= f.number_field :position, :class => "form-control" %>
            </div>
        </div>
    </div>
    <div class="form-group">
        <div>
            <%= f.submit "Add slide", :class => "btn btn-blue" %>
        </div>
    </div>
<% end %>

我还为 CREATE 操作创建了一个 JS 部分 create.js.erb

var container = $("#current_slides")

    <% if @mission_slide.errors.present? %>
        $("#new_mission_slide").prepend("<%= escape_javascript render :partial => "layouts/form_messages", :locals => {:model_name => @mission_slide, :heading => t('errors.template.header', :count => @mission_slide.errors.size, :model => @mission_slide.class) } %>");
    <% else %>
        $('form[id*="new_mission_slide"]').replaceWith('<%= escape_javascript render("form") %>')
        $container.append(@mission_slide)
    <% end %>

感谢您的明智见解

【问题讨论】:

  • 好吧,我发现这个链接解释了为什么 Ajax 不能用于文件上传。 Uploadify 是一种建议的方式,但我确实希望不惜一切代价避免使用 Flash。 ajax and file upload issues

标签: ajax ruby-on-rails-3 remote-forms


【解决方案1】:

我遇到了同样的问题,这是因为布局中缺少以下行

<%= javascript_include_tag :defaults %>

【讨论】:

  • 感谢您的评论。想多解释一下吗?在我的 application.html.erb 我已经&lt;%= javascript_include_tag "application" %&gt;。默认值添加了什么?
  • 因此,如果布局中不包含此内容,则不会加载所需的 javascript,因此remote =&gt; true 不会生效,请求将作为正常同步HTML 请求提交而不是 JS 。这对你也有用吗?
  • 我看到它添加了default.js,但它仍然作为正常的同步HTML提交:(.
  • 你的 application.js 中有 //= require jquery//= require jquery_ujs 吗?
  • 是的,我已经加载了所有的 jquery。我的应用程序中有其他可以正常工作的 AJAX 操作。我在想可能是carrierwave以某种方式强制转换为正常的同步HTML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多