如何在Rails中使用Ajax将数据从控制器传递到视图

3
我今天发了两个类似的问题,请看以下链接:

如何在Coffeescript中使用本地或实例变量

Ajax在Rails中总是返回错误回调函数

我对这些问题感到困惑,希望能请教一下。
我正在使用ajax在haml中重新加载来自控制器的数据以更新页面的某个部分。请看我的代码:

.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)中。

回调和响应以文本形式正确返回。

如何从ajax响应数据传递数据到视图,或者是否有其他方法?

对我的拙劣英语表示抱歉。我希望有人能给我提示。

提前致谢!


在重新阅读了您的问题之后,我想知道为什么您希望响应以 :text 格式呈现,我认为 JSON 应该可以胜任这项工作,或者不行吗? - fudanchii
1个回答

3
你可以将ajax请求设置为/posts/gaga.json,并在你的控制器的gaga方法中处理该请求:
respond_to do |format|
  format.html
  format.json { render :json => @model }
end

如果你打算通过ajax以外的方式访问/posts/gaga,你可能需要准备gaga.html.haml视图文件,或者如果你只打算以json方式响应,则可以删除format.html


为了澄清,我知道您想在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

现在进入您的视图:
请注意,该文本涉及IT技术相关内容。
= 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)

谢谢您的回答。我找到了将数据传递到视图的解决方案,但是它使用 jQuery 替换文本 HTML,所以在 Rails 中可能不正确。实际上,我不太理解您的答复,但这可能是正确的方法,而不是我的方法。我会尝试一下。谢谢! - T.Akashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接