2013-10-17 44 views
0

我可能錯過了一些東西,這裏是我的問題。Rails 3.2遠程窗體響應HTML而不是JS

我有一個表單提交圖像,我希望表單使用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 %> 

,我也創建了一個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 %> 

感謝您的英明見解

+0

失蹤好吧,我發現這個鏈接,解釋了一下爲什麼阿賈克斯不能與文件上傳工作。 Uploadify是一種建議的方式,但我希望不惜一切代價避免使用Flash。 [ajax和文件上傳問題](http://stackoverflow.com/questions/9441933/does-the-ruby-on-rails-carrierwave-gem-work-with-ajax) –

回答

0

我遇到了同樣的問題,這是怎麼一回事,因爲下面的線是在佈局

<%= javascript_include_tag :defaults %> 
+0

謝謝你的評論。小心解釋一下?在我的application.html.erb中,我已經有'<%= javascript_include_tag「應用程序」%>'。什麼是默認值添加? –

+0

所以,如果這不包括在佈局中,那麼所需的javascripts不會被加載,因爲'remote => true'不會生效,並且請求被提交爲正常的同步'HTML'請求而不是'JS '。這對你是否也有用? –

+0

我看到它添加了default.js,但它仍然作爲正常的同步HTML提交:(。 –

相關問題