如何使用 ajax in rails 将数据从控制器传递到视图
How to pass data from controller to view with ajax in rails
我今天发了两次类似的问题
how-to-use-local-or-instance-variable-in-ruby-code-in-coffeescript-in-haml-templ
我对这些问题感到困惑,请让我问一下。
我在 haml 中使用 ajax 来使用来自控制器的数据重新加载页面的一部分。
请看我的代码。
.html.haml
= render 'layouts/partial' #This is partial. I want to reload this part
:coffee
$('input#field').change ->
$.ajax
url: '/posts/gaga'
type: "POST"
dataType: 'text'
error: (jqXHR, textStatus, errorThrown) ->
alert "error"
success: (data, textStatus, jqXHR) ->
alert "success"
$('div.kore').html('#{ j( render( 'layouts/partial' ) )} ');
posts_controller.rb
def gaga
@model = Model.new("blabla")
render :text => @model
end
_partial.html.haml
- if @model
= @model.html_safe
- else
= "No data"
首先,我认为数据可以通过控制器的@model 实例变量获取,但它不能。
其次,我尝试使用 jQuery.
从 ajax 响应数据中获取数据以查看(_partial.html.haml)
回调和响应 return 正确地作为文本。
如何传递数据以查看 ajax 响应数据,或者有其他方法吗?
对不起我马虎的英语。希望有人给我线索。
提前致谢!
您可以将 ajax 请求设置为 /posts/gaga.json
并在控制器的 gaga 方法中:
respond_to do |format|
format.html
format.json { render :json => @model }
end
如果您还打算通过 ajax 访问 /posts/gaga
,您可能需要准备 gaga.html.haml
查看文件,或者如果您只打算响应,则只需删除 format.html
在 json.
澄清一下,我看到您想在 ajax 请求后重新加载部分内容。所以而不是:
$('div.kore').html('#{ j( render( 'layouts/partial' ) )} ');
你可以这样做:
# inside gaga methods
format.json do
render(json: {
view: render_to_string(partial: 'layouts/partial', layout: false)
})
end
现在在您的视野中:
= render 'layouts/partial' #This is partial. I want to reload this part
:coffee
$('input#field').change ->
$.ajax
url: '/posts/gaga.json'
type: "POST"
error: (jqXHR, textStatus, errorThrown) ->
alert "error"
success: (data, textStatus, jqXHR) ->
alert "success"
$('div.kore').html(data.view)
我今天发了两次类似的问题
how-to-use-local-or-instance-variable-in-ruby-code-in-coffeescript-in-haml-templ
我对这些问题感到困惑,请让我问一下。
我在 haml 中使用 ajax 来使用来自控制器的数据重新加载页面的一部分。
请看我的代码。
.html.haml
= render 'layouts/partial' #This is partial. I want to reload this part
:coffee
$('input#field').change ->
$.ajax
url: '/posts/gaga'
type: "POST"
dataType: 'text'
error: (jqXHR, textStatus, errorThrown) ->
alert "error"
success: (data, textStatus, jqXHR) ->
alert "success"
$('div.kore').html('#{ j( render( 'layouts/partial' ) )} ');
posts_controller.rb
def gaga
@model = Model.new("blabla")
render :text => @model
end
_partial.html.haml
- if @model
= @model.html_safe
- else
= "No data"
首先,我认为数据可以通过控制器的@model 实例变量获取,但它不能。
其次,我尝试使用 jQuery.
从 ajax 响应数据中获取数据以查看(_partial.html.haml)回调和响应 return 正确地作为文本。
如何传递数据以查看 ajax 响应数据,或者有其他方法吗?
对不起我马虎的英语。希望有人给我线索。
提前致谢!
您可以将 ajax 请求设置为 /posts/gaga.json
并在控制器的 gaga 方法中:
respond_to do |format|
format.html
format.json { render :json => @model }
end
如果您还打算通过 ajax 访问 /posts/gaga
,您可能需要准备 gaga.html.haml
查看文件,或者如果您只打算响应,则只需删除 format.html
在 json.
澄清一下,我看到您想在 ajax 请求后重新加载部分内容。所以而不是:
$('div.kore').html('#{ j( render( 'layouts/partial' ) )} ');
你可以这样做:
# inside gaga methods
format.json do
render(json: {
view: render_to_string(partial: 'layouts/partial', layout: false)
})
end
现在在您的视野中:
= render 'layouts/partial' #This is partial. I want to reload this part
:coffee
$('input#field').change ->
$.ajax
url: '/posts/gaga.json'
type: "POST"
error: (jqXHR, textStatus, errorThrown) ->
alert "error"
success: (data, textStatus, jqXHR) ->
alert "success"
$('div.kore').html(data.view)