2017-07-21 18 views
0

(Railsのバージョン5.1.2)(JavaScriptの代わりに)HTMLでAJAX呼び出しに応答Railsの5:

私が概説とほぼ同じ理由でHTMLではなくJavaScriptでAJAXに対応したいと思います

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ですか? Railsのに

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

ルビー:

Javascriptを:私は完全にあなたが何をしたいのか誤解していない限り

+0

あなたは何をしようとしているのか分かりませんが、HTMLサーバー側をレンダリングしてAJAX呼び出し応答で返すことはできませんか? –

+0

それは私がやろうとしていることです。 –

+0

リンクされた質問に言及すると、リモートフォームを避け、JavaScriptからAJAXを呼び出すだけで、htmlをRailsから文字列として受け取り、それをあなたのHTMLに追加するのはなぜですか? –

答えて

0

、これはあなたが探しているものでなければなりません

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は単純にその文字列を渡すための形式です。 –