这是一个相对简单的方法,我很确定它的语法正确。
我试图将多个对象渲染为 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
问题是我只得到一个 json,而且它始终是最上面的。有没有办法以这种方式渲染多个对象?
或者我应该创建一个由其他objects.to_json组成的新对象?
你实际上可以这样做:
format.json {
render :json => {
:websites => @allWebsites,
:pages => @allPages,
:element_types => @AllElementTypes,
:element_data => @AllElementData
}
}
如果您使用 jquery,您将需要执行以下操作:
data = $.parseJSON( xhr.responseText );
data.websites #=> @allWebsites data from your controller
data.pages #=> @allPages data from your controller
等等
EDIT:
回答你的问题,你不一定要解析响应,这只是我通常所做的。有许多函数可以立即为您完成此操作,例如:
$.getJSON('/info', function(data) {
var websites = data.websites,
pages = data.pages,
...
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)