2013-05-08 47 views
0

我正在使用AJAX而不是http來提交表單。 這是形式:Rails 3使用http而不是AJAX提交圖片上傳表單

<%= form_for(:image, :remote => true, :url => {:controller=> 'questions',:action => 'upload'},:multipart => true) do |f| %> 

    <%= f.file_field :image, :onchange => "$(this).parents('form').submit();" %> 

    <% end %> 

上方並與onchange事件提交表單我已經設置了:remote => true選項。我有下面的代碼在控制器:

def upload 

    if request.xhr? 
     @image = Image.new(params[:image]) 
     @image.save 

      respond_to do |format| 
       format.js { render :layout=>false } 
      end 
    else 
      render :text => 'Request Wasnt AJAX' 
    end 
end 

我的動作呈現文本每次,請求似乎並不爲AJAX風格,儘管遠程標記被設置(正確顯示,即使在最終的HTML)。我無法弄清楚我的錯在哪裏。我已經在FF和Chrome的最新瀏覽器版本中進行了測試,所以我不認爲這是瀏覽器問題。有任何想法嗎 ?

更新:我做了一些更多的調試嘗試。問題在於文件字段,如果我用文本字段替換文件字段,則請求是AJAX(其他所有內容保持相同)。但是對於文件字段,它總是發送一個非AJAX請求。

注意:總體目標是通過AJAX請求上傳圖片,響應不渲染任何內容,不顯示HTML,不重定向,不重新加載頁面。

+0

你的application.js或其他包含的JS文件中是否都有//// = require jquery'和'// = require jquery_ujs'? – mccannf 2013-05-08 09:19:57

+0

嘿,是的。我做了更多的測試。問題在於文件字段,如果我用文本字段替換文件字段,則請求是AJAX(其他所有內容保持相同)。但是對於文件字段,它總是發送一個非AJAX請求。 – Superq 2013-05-08 09:35:02

回答

1

JQuery form.sumbit()以正常方式提交表單(不是Ajax)。你必須以不同的方式做到這一點:

$('#submitButton').click(function() { 
    $.ajax({ 
     url: 'some-url', 
     type: 'post', 
     dataType: 'json', 
     data: $('#myForm').serialize(), 
     success: function(data) { 
       // ... do something with the data... 
     } 
    }); 
}); 
+0

不當:remote => true在rails中設置。請閱讀更新。當表單字段是文本時它工作正常,專門爲圖像失敗。如果不使用插件,通過上面的ajax函數上傳圖片也很複雜。 – Superq 2013-05-08 10:15:10