我有一个控制器动作(让我们称之为some_controller_action)需要渲染一些json(用于拾取javascript)并同时使用some_controller_action.js.erb刷新/重新渲染部分。
我的代码建议是这样的:
def some_controller_action
#
# lots of code here
#
respond_to do |format|
render :json => {:something => something}, :status => :ok
format.html {
redirect_to somewhere
}
format.js
end
end
客户端ajax / javascript触发此操作并接收json作为响应。它看起来像这样:
someCoffeescripAction = ->
$.ajax
type: "post"
dataType: "json"
data:
some_data_name: some_data_content
url: "some_url/some_controller_action"
success: (data, status, xhr) ->
do_something_with_the_response(data)
error: (xhr, textStatus, errorThrown) ->
当然这不起作用,因为我不允许在同一个动作中渲染两次。但那该怎么办?
答案 0 :(得分:1)
你的javascript是什么样的?你是否通过ajax获取控制器动作?如果是这样,那么你只需要等到ajax调用完成,然后通过使用刚刚获取的json数据或通过调用另一个ajax函数来触发部分的重新渲染。