🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2653閲覧

Rails $.ajax で送信したjsonデータをjs.erbファイル内でエスケープ解除できない

orori

総合スコア42

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/12/06 11:51

編集2019/12/07 05:09

$.ajaxでリクエストを出して、データをviewのjs.erbで受けようとしていますが、
データにかけられたエスケープ処理が元に戻りません。

js.erbのviewsで、普通に使える連想配列にしたいのですが、どのようにしたらよいのでしょうか。

JS

1$(() => { 2 var fd = new FormData(); 3 fd.append('jsondata', JSON.stringify({ "S": ["1", "2", "3"], "A": ["4", "5"] })) 4 5 $.ajax({ 6 type: "POST", 7 beforeSend: function (xhr) { 8 xhr.setRequestHeader('X-CSRF-Token', 9 $('meta[name="csrf-token"]').attr('content')) 10 }, 11 url: "/manage/search", 12 data: fd, 13 dataType: "script", 14 processData: false, 15 contentType: false, 16 }); 17})

ruby

1#app/controllers/manage 2 def search 3 @data = params[:jsondata] 4 end

js

1// app/views/manage/search.js.erb 2 console.log("<%= @data %>")

search.js.erbが実行される際に、コンソールに表示されるデータ

{&quot;S&quot;:[&quot;1&quot;,&quot;2&quot;,&quot;3&quot;],&quot;A&quot;:[&quot;4&quot;,&quot;5&quot;]}

やってみたこと

  1. console.log("<%= JSON.parse(@data) %>")としてみた。
  2. console.log("<%= CGI.unescapeHTML(@data) %>")としてみた。

どちらもコンソールに表示されるデータに変化がありませんでした。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく、受信側 (js.erb) ではなく、送信側 ($.ajax を使っている方) に問題ありです。
原因は、contentType'application/json' に設定していないためだと思います。

詳しくは「jquery ajax json 送信」等で検索してください。

投稿2019/12/06 12:25

2KOH

総合スコア999

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

orori

2019/12/06 15:17 編集

ありがとうございます。'application/json'でもやってみたのですが、上のとおりかわりません。あまりにダメなので、正規表現で<%= @data.to_s.gsub!(/&quot;/,"") %>としても、表示されないです。js.erbは何か特殊な環境なのでしょうか・・・
2KOH

2019/12/06 23:51

これが原因でないならわかりません。 環境を再現して調べればわかるかもしれませんが、そこまではしたくないので、すみませんが他の人を頼ってください。
orori

2019/12/07 05:05 編集

以下のようにしましたら、できました! console.log('<%= raw(@data.to_json) %>') まず、全体の囲いをJSON内部と干渉しないようにシングルクオートに変更し、 to_jsonメソッドでアローをコロンに変換、rawでエスケープを解除します。 以下に記載がありました。 https://stackoverflow.com/questions/39240224/how-can-i-unescape-and-remove-quot-from-data-served-by-rails-into-javascript contentTypeはこれらの前提でした。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問