2012-03-06 55 views
34

我正在使用Rails 3.2,我有一個表單,我希望它通過ajax發佈並讓控制器返回json。Rails 3遠程表單:如何指定內容類型?

我使用像這樣一個幫手的form_for:

= form_for(@object, :remote => true, :format => :json) do |f| 
.... 

我的目標控制器創建方法是這樣的:

def create 
    respond_to do |format| 
     if @object.save 
     format.html { redirect_to @object } 
     format.json { render json: @object, status: :created, location: @object } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @object.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

的形式ajaxly提交預期。但控制器正在返回html,而不是json!

用firebug檢查請求,並確信ajax請求上的Content-Type http頭正在設置爲application/html。

圍繞這個的文檔非常稀少::format =>:json似乎只是將「.json」附加到窗體動作,而不是實際修改任何http標頭。

我也試過:content_type =>:json無效。

我不能簡單地硬編碼控制器返回JSON,因爲有其他地方我不希望它返回的HTML ...

因此,沒有人知道如何使用時告訴控制器來呈現JSON的form_for?

感謝您的幫助

+0

什麼URL和方法獲取表單標籤呈現在網頁上? – iltempo 2012-03-06 12:20:58

+0

後,完整的標記是:

Chris 2012-03-06 12:23:57

+0

否json在這裏。你有沒有考慮使用request.xhr?區分ajax和普通請求而不是請求的格式? – iltempo 2012-03-06 12:32:57

回答

48

可以設置內容類型與:

= form_for(@object, :remote => true, :html => {:'data-type' => 'json'})

rails.js線106

+0

謝謝!知道我錯過了一些明顯的東西! :) – Chris 2012-03-06 12:55:56

+16

在Rails 4中,您可以使用'format :: json'(或':format =>:json')而不是':html => {:'data-type'=>'json'}' – 2013-11-06 20:04:45

+0

@JamesMcMahon在Rails 3.2中。 – RocketR 2013-12-18 16:12:38

0

描述對於導軌5,適當的方式是設置數據屬性 data: { type: :json }

JQuery UJS docs

+1

已經存在的答案已經存在提供這些信息和更多信息,請提出更多的努力以實際回答問題或回答。 – 2017-08-01 00:35:49

+0

@DavyM有點沉重。他只是試圖幫助,並實際幫助我與UJS文檔的鏈接。 – EasyCo 2018-02-16 04:32:29