Rails 在 controller 直接渲染页面输出 (不是 json)

myliang · 2012年03月16日 · 最后由 cantin 回复于 2012年03月17日 · 5858 次阅读

现在在开发中遇到这样的一个问题: 就是,当页面进行 ajax 请求时,往往请求的是 Json 数据,但是,我现在想在 controller 中直接渲染页面,之后输出到页面,这是一个 ajax 请求,直接输出 html???

直接 render,不行吗?json 仅仅是一种返回格式,使用 html 格式返回不就行了?

我是想这样:render :partial => "product", :collection => @products???

#3 楼 @myliang 还是没明白你的意思,默认不就是返回 html 吗?与 ajax 没关系。如果你是局部更新界面,比如就想用 render :partial 更新某一区域,最好用 js.erb,直接 js:

$("#div1").append("<%= escape_javascript(render :partial ...) %>");


#4 楼 @zhaoguobin 就是这样 render :text => html_str(局部页面字符串)

#5 楼 @myliang 直接 render :text => html_str 这种写法也可以,如果客户端不过滤一下返回值的话,很容易因为换行等字符导致 js 代码错乱。

#4 楼 @zhaoguobin 之前,我是直接返回的 json , render :json => @products ; 之后用 js 在页面拼装数据显示,我现在就想,直接后台输出 html,不需要 js 解析,只需要 $.get(url, {}, function(html){ $('#d').html(html); })

#6 楼 @zhaoguobin 关键 html_str 希望是使用类似这样的方式生成:render :partial ...

#7 楼 @myliang js.erb,你应该用这个!

render :layout =>false

然后在对应的 view 里写返回的文本。

默认渲染视图时,会在外面套上布局(layout),

render :layout => false

返回的就是当前 action 对应的视图,没有 layout。所以你想返回一段 html,就把需要的 html 放在这个视图里的好了吧?

render ‘your/hamlorerb/view’ layout: false

在发 ajax 请求的时候指定浏览器接收的格式,用 jquery 的话指定 datatype 为 html,这样后台发送回来的的应该是 format.html

需要 登录 后方可回复, 如果你还没有账号请 注册新账号