2011-08-09 5 views
4

これは比較的簡単なものです。複数のJSONレンダリングで応答します。 (Ruby/Rails)

私は複数のオブジェクトをコントローラの応答としてjsonとしてレンダリングしようとしています。だからこのようなもの:

def info 
    @allWebsites = Website.all 
    @allPages = Page.all 
    @allElementTypes = ElementType.all 
    @allElementData = ElementData.all 


    respond_to do |format| 
     format.json{render :json => @allWebsites} 
     format.json{render :json =>@allPages} 
     format.json{render :json =>@allElementTypes} 
     format.json{render :json =>@allElementData} 
     end 
    end 
    end 

問題私は1つのjsonしか戻っておらず、常にトップのものです。この方法で複数のオブジェクトをレンダリングする方法はありますか?

他のオブジェクトで作られた新しいオブジェクトを作成する必要がありますか?to_json?

答えて

14

あなたが実際にそのようにそれを行うことができます:

format.json { 
    render :json => { 
     :websites => @allWebsites, 
     :pages => @allPages, 
     :element_types => @AllElementTypes, 
     :element_data => @AllElementData 
    } 
} 

あなたはあなたのような何かを行う必要がありますjqueryのを使用する場合には:

EDIT上

data = $.parseJSON(xhr.responseText); 
data.websites #=> @allWebsites data from your controller 
data.pages #=> @allPages data from your controller 

ので:

あなたの質問に答えるには、必ずしも応答を解析する必要はありません、それは私が好きなものですアライはそうです。例えば、すぐにあなたのためにそれを行う関数の数があります:jQueryのに関して

$.getJSON('/info', function(data) { 
    var websites = data.websites, 
     pages = data.pages, 
     ... 

}); 
+0

私は明確にしたいあなたは、私がときに別々のJSON要素に戻ってJSONを解析する必要がありますことを意味していますサーバーから受信しましたか? – overtone

+0

それは私に似ています。合理的に聞こえる。 –

+0

正解 - 応答は* one * jsonオブジェクトでなければなりません...あなたは応答を取得した後、さらにそれを分解することができます。だからこそ、レールは1つしか送りませんでしたが、他のものは無視しています。 – DGM

関連する問題