【问题标题】:Rails 5: Respond to AJAX call with HTML (instead of javascript)Rails 5:使用 HTML(而不是 javascript)响应 AJAX 调用
【发布时间】:2017-12-27 08:00:53
【问题描述】:

(Rails 版本 5.1.2)

出于与this 堆栈溢出问题中所述相同的原因,我想使用 HTML 而不是 javascript 来响应 AJAX。

但是,我实际上无法让它工作。

我正在使用 form_forremote: true 通过 AJAX 发送请求。请注意,我还尝试过data: {type: :html}

我的控制器动作有render layout: !request.xhr? 行并且有一个关联的视图。我想发回给客户的正是这个视图。

还有客户端代码:

$("form").on('ajax:success', (e, data, status, xhr) ->
  console.log xhr.responseText #using console.log data produces same result
)

给予:

Turbolinks.clearCache()
Turbolinks.visit("http://localhost:3000/...", {"action":"replace"})

HTML 在哪里?

【问题讨论】:

  • 我不是 100% 确定我理解你想要做什么,但是你能不能不渲染 HTML 服务器端并在 AJAX 调用响应中返回它?
  • 这就是我想要做的。
  • 正如链接的问题所提到的,您为什么不避免使用远程表单,而只需从 javascript 自己进行 AJAX 调用,从 Rails 接收 html 作为字符串,然后将其附加到您的 HTML 中?跨度>

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

除非我完全误解了你想要做什么,否则这应该是你要找的:

Javascript

$.ajax({
  // remember to add this route to your routes file
  url: "products/ajax_render",
  success: function(data){
    $('.some_div').html(data['html'])
  },
});

Ruby on Rails

def ajax_render
  # render some view and store it in a variable
  html = render "products/your_view"

  # return it inside the json response
  render json: { html: html }
end

我错过了什么吗?

【讨论】:

  • 感谢您的回复。因此,在您的示例中,我只想将 ajax_render.html.erb 中生成的 HTML 返回给客户端(然后在客户端对其进行操作)。而已。如果是非 ajax 调用,我根本不需要控制器操作中的任何代码来返回正确的 HTML。除了可能禁用布局之外,我只是不明白为什么在控制器操作中需要做任何事情。为什么在您的回答中,您必须将 html 转换为 json 格式,然后在客户端重新提取 HTML?为什么你不能只发送 HTML ???!!!
  • 因为当您将 HTML 呈现为变量时,它只是一个字符串。我们所做的只是将该字符串作为 JSON 变量发送,然后将其附加到 DIV。您将 JSON 和 HTML 视为数据类型或文件类型,但在这种情况下,HMTL 只是您从服务器传递到客户端的字符串,而 JSON 只是您用于传递该字符串的格式。
猜你喜欢
  • 2014-10-24
  • 2018-12-17
  • 1970-01-01
  • 2014-03-25
  • 2019-09-22
  • 1970-01-01
  • 2019-01-27
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多