2017-07-21 44 views
0

(Rails的版本5.1.2)Rails的5:响应AJAX调用与HTML(而不是JavaScript)的

我想对AJAX响应与HTML而不是JavaScript,就像在描述的同样的理由this堆栈溢出问题。

但是,我实际上无法让它工作。我使用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?

+0

我不是100%确定我明白你正在尝试做什么,但是你能否不渲染HTML服务器端并将它返回给AJAX调用响应? –

+0

这就是我想要做的。 –

+0

由于链接的问题提到,为什么不避免远程表单,并简单地从JavaScript自己的AJAX调用,从Rails接收字符串的HTML,然后将其附加到您的HTML? –

回答

0

除非我完全误解你想做的事,这应该是你在找什么:

的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 

我错过了什么吗?

+0

感谢您的回复。因此,在您的示例中,我只想将ajax_render.html.erb中生成的HTML返回给客户端(然后在客户端对其进行处理)。而已。如果它是非ajax调用,那么在控制器操作中根本不需要任何代码来返回正确的HTML。我只是不明白为什么在控制器操作中需要做任何事情,除了可能禁用布局。为什么在你的回答中,你是否必须将html转换为json格式,然后在客户端重新提取HTML?为什么你不能只发送HTML ??? !!! –

+0

因为当你将HTML渲染成一个变量时,它只是一个字符串。我们所做的只是将该字符串作为JSON变量发送,然后将其附加到DIV。您正在考虑将JSON和HTML视为数据类型或文件类型,但在这种情况下,HMTL只是您从服务器传递给客户端的字符串,而JSON只是您用来传递该字符串的格式。 –