2017-07-21 66 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只是您用來傳遞該字符串的格式。 –