【问题标题】:How to pass data from controller to view with ajax in rails如何在rails中使用ajax将数据从控制器传递到视图
【发布时间】:2015-06-26 04:10:14
【问题描述】:

我今天发布了两次类似的问题

how-to-use-local-or-instance-variable-in-ruby-code-in-coffeescript-in-haml-templ

ajax-in-rails-returns-alway-error-callback

我对这些问题感到困惑,请让我问一下。

我在 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 响应数据中获取数据到 view(_partial.html.haml)。

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

如何从ajax响应数据中传递数据来查看,还是有其他方法?

对不起,我的英语很草率。我希望有人给我线索。

提前致谢!

【问题讨论】:

  • 重读您的问题后,我想知道为什么您希望回复采用:text 格式,我想json 应该可以完成这项工作,或者不是?

标签: javascript ruby-on-rails ajax coffeescript


【解决方案1】:

您可以将 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

现在在你的视野中:

= 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 中可能不正确。实际上我不太了解您的答案,但它可能是正确的方法而不是我的方法。我会试试看。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-08
  • 2016-07-08
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2019-06-02
相关资源
最近更新 更多